ggsave(filename = "RAVLT_RETENTION-RAVLT_RETRO_INTERFERENCE.pdf", plot = plot7)
Saving 7 x 7 in image
Warning: Removed 1 row containing non-finite outside the scale range (`stat_boxplot()`).
Warning: Removed 1 row containing missing values or values outside the scale range (`geom_point()`).
RAVLTs_EscoreZ <- bind_cols(RAVLT_A1_Z, RAVLT_A2_Z, RAVLT_A3_Z, RAVLT_A4_Z, RAVLT_A5_Z,
                            RAVLT_B1_Z, RAVLT_A6_Z, RAVLT_A7_Z, RAVLT_REC_Z, RAVLT_TOTALSCORE_Z,
                           RAVLT_RETENTION_Z, RAVLT_PROAT_INTERFERENCE_Z, RAVLT_RETRO_INTERFERENCE_Z ) 
New names:
• `ID` -> `ID...1`
• `ID` -> `ID...8`
• `ID` -> `ID...11`
• `ID` -> `ID...14`
• `ID` -> `ID...17`
• `ID` -> `ID...20`
• `ID` -> `ID...23`
• `ID` -> `ID...26`
• `ID` -> `ID...29`
• `ID` -> `ID...32`
• `ID` -> `ID...35`
• `ID` -> `ID...38`
• `ID` -> `ID...41`
######################################   BPAs Zscore  ###############################

data <- readxl::read_xlsx ("BPAs_EscoreZ.xlsx", sheet = 1)

summary(data)
    ID...1               AGE           GROUP            EDU_LEVEL          LIMIT_AGE         BPA_CONC_POINTS
 Length:119         Min.   :19.00   Length:119         Length:119         Length:119         Min.   : 44.0  
 Class :character   1st Qu.:26.00   Class :character   Class :character   Class :character   1st Qu.: 80.0  
 Mode  :character   Median :33.00   Mode  :character   Mode  :character   Mode  :character   Median : 93.0  
                    Mean   :32.87                                                            Mean   : 92.5  
                    3rd Qu.:39.00                                                            3rd Qu.:105.0  
                    Max.   :49.00                                                            Max.   :120.0  
 BPA_CONC_EscoreZ     ID...8          BPA_DIVID_POINTS BPA_DIVID_EscoreZ   ID...11          BPA_ALTERN_POINTS
 Min.   :-2.0037   Length:119         Min.   : 26.0    Min.   :-1.4001   Length:119         Min.   : 50.00   
 1st Qu.:-0.2174   Class :character   1st Qu.: 71.5    1st Qu.:-0.1057   Class :character   1st Qu.: 89.00   
 Median : 0.3333   Mode  :character   Median : 82.0    Median : 0.4232   Mode  :character   Median :101.00   
 Mean   : 0.3277                      Mean   : 81.5    Mean   : 0.3806                      Mean   : 97.89   
 3rd Qu.: 0.8589                      3rd Qu.: 92.0    3rd Qu.: 0.7983                      3rd Qu.:110.00   
 Max.   : 1.7190                      Max.   :116.0    Max.   : 1.8387                      Max.   :120.00   
 BPA_ALTERN_EscoreZ   ID...14            BPA_TOTAL     BPA_TOTAL_EscoreZ
 Min.   :-1.5930    Length:119         Min.   :163.0   Min.   :-1.5149  
 1st Qu.: 0.2312    Class :character   1st Qu.:249.0   1st Qu.: 0.1329  
 Median : 0.7415    Mode  :character   Median :271.0   Median : 0.5092  
 Mean   : 0.6124                       Mean   :271.9   Mean   : 0.5191  
 3rd Qu.: 1.1197                       3rd Qu.:303.5   3rd Qu.: 1.1353  
 Max.   : 1.8333                       Max.   :350.0   Max.   : 2.1040  
colnames(data)
 [1] "ID...1"             "AGE"                "GROUP"              "EDU_LEVEL"          "LIMIT_AGE"         
 [6] "BPA_CONC_POINTS"    "BPA_CONC_EscoreZ"   "ID...8"             "BPA_DIVID_POINTS"   "BPA_DIVID_EscoreZ" 
[11] "ID...11"            "BPA_ALTERN_POINTS"  "BPA_ALTERN_EscoreZ" "ID...14"            "BPA_TOTAL"         
[16] "BPA_TOTAL_EscoreZ" 
data <- data %>% rename(ID = ID...1) %>% select(-ID...8,-ID...11,-ID...14)
  
                                        # Filtrando dados BPAs

p1 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,EDU_LEVEL , AGE, BPA_CONC_POINTS , BPA_CONC_EscoreZ  )

p2 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,EDU_LEVEL, AGE, BPA_DIVID_POINTS , BPA_DIVID_EscoreZ  )

p3 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,EDU_LEVEL ,AGE, BPA_ALTERN_POINTS , BPA_ALTERN_EscoreZ )

ptotal <- data %>%  select(ID,EDU_LEVEL ,GROUP ,EDU_LEVEL ,AGE, BPA_ALTERN_POINTS , BPA_ALTERN_EscoreZ )

                                                #   P1  
  

coresBPA <- c("#1a2887", "#799de4")



p1 <- data %>% 
  arrange(ID) %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", BPA_CONC_POINTS,
                      "\nZ-Score: ", BPA_CONC_EscoreZ, sep="")) %>%
  ggplot(aes(x = AGE, y = BPA_CONC_EscoreZ, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresBPA) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score Focused Attention", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 18, face = "bold"),
    plot.subtitle = element_text(size = 18,face = "bold"),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 15),
    legend.position = "",
    legend.text = element_text(size = 5)
    )
    
            # GrĂ¡fico interativo da bibliotexa ggplottly

pp1 <- ggplotly(p1, tooltip="text") %>%
  
  layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))
  

pp1

                                #   P2

p2 <- data %>%
  arrange(ID) %>%
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", BPA_DIVID_POINTS,
                      "\nZ-Score: ", BPA_DIVID_EscoreZ, sep="")) %>%
  ggplot(aes(x = AGE, y = BPA_DIVID_EscoreZ, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7, position = "jitter") +
  scale_fill_manual(values = coresBPA) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score Divid Attention", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 18, face = "bold"),
    plot.subtitle = element_text(size = 18,face = "bold"),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 15),
    legend.position = "",
    legend.text = element_text(size = 5)
    )
    

                      # GrĂ¡fico interativo da bibliotexa ggplottly

pp2 <- ggplotly(p2, tooltip="text") %>%  
 
   layout(legend = list(x = 0, y = 1.01,
                    title = " ",
                    bgcolor = "#ecf0f1",
                    bordercolor = "white",
                    borderwidth = 1,
                    font = list(size = 9, family = "Arial", color = "black"),
                    orientation = 50,
                    tracegroupgap = 20,
                    traceorder = "normal"
                    ))
 
pp2 

                                      #   P3

p3 <- data %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", BPA_ALTERN_POINTS,
                      "\nZ-Score: ", BPA_ALTERN_EscoreZ, sep="")) %>%
  
  ggplot(aes(x = AGE, y = BPA_ALTERN_EscoreZ, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresBPA) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score Altern Attention", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 18, face = "bold"),
    plot.subtitle = element_text(size = 18,face = "bold"),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 15),
    legend.position = "",
    legend.text = element_text(size = 5)
    )
  

                    # GrĂ¡fico interativo da bibliotexa ggplottly

pp3 <-  ggplotly(p3, tooltip="text") %>%  
  
    layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))


pp3

                              #BPA_TOTAL

ptotal <- data %>% 
  arrange(ID) %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", BPA_TOTAL,
                      "\nZ-Score: ", BPA_TOTAL_EscoreZ, sep="")) %>%
  ggplot(aes(x = AGE, y = BPA_TOTAL_EscoreZ, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresBPA) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score Total", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 18, face = "bold"),
    plot.subtitle = element_text(size = 18,face = "bold"),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 15),
    legend.position = "",
    legend.text = element_text(size = 5)
    )
    
            # GrĂ¡fico interativo da bibliotexa ggplottly

pptotal <- ggplotly(ptotal, tooltip="text") %>%
  
  layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))
  

pptotal

######################################    FDTs Zscore  ###############################

data <- readxl::read_excel("FDT_EscoreZ.xlsx")

data <- na.omit(data)

colnames(data)
 [1] "ID...1"              "AGE"                 "EDU_LEVEL"           "GROUP"               "LIMIT_AGE"          
 [6] "FDT_READING_TIME"    "FDT_READING_TIME_Z"  "ID...8"              "FDT_COUNTING_TIME"   "FDT_COUNTING_TIME_Z"
[11] "ID...11"             "FDT_CHOOSING_TIME"   "FDT_CHOOSING_TIME_Z" "ID...14"             "FDT_CHANGING_TIME"  
[16] "FDT_CHANGING_TIME_Z" "ID...17"             "FDT_INHIBITION"      "FDT_INHIBITION_Z"    "ID...20"            
[21] "FDT_FLEXIBILITY"     "FDT_FLEXIBILITY_Z"  
data <- data %>% rename(ID = ID...1)

data

                                      #  Filtrando FDTs 



p4 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,AGE, FDT_READING_TIME , FDT_READING_TIME_Z  )

p5 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,AGE, FDT_COUNTING_TIME , FDT_COUNTING_TIME_Z  )

p6 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,AGE, FDT_CHOOSING_TIME , FDT_CHOOSING_TIME_Z )

p7 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,AGE, FDT_CHANGING_TIME , FDT_CHANGING_TIME_Z )

p8 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,AGE, FDT_INHIBITION , FDT_INHIBITION_Z )

p9 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,AGE, FDT_FLEXIBILITY , FDT_FLEXIBILITY_Z )

                                            #  P4


coresFDT <- c("#f6a3ab", "#1ab6ac")



p4 <- data %>% 
  arrange(ID) %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", FDT_READING_TIME,
                      "\nZ-Score: ", FDT_READING_TIME_Z, sep="")) %>%
  ggplot(aes(x = AGE, y = FDT_READING_TIME_Z, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresFDT) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score FDT Reading Time", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 12, face = "bold"),
    plot.subtitle = element_text(size = 12),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 10),
    legend.position = "",
    legend.text = element_text(size = 5)
    )
    

pp4 <- ggplotly(p4, tooltip="text") %>%
  
  layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))


pp4

                                      #  P5

p5 <- data %>% 
  arrange(ID) %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", FDT_COUNTING_TIME,
                      "\nZ-Score: ", FDT_COUNTING_TIME_Z, sep="")) %>%
  ggplot(aes(x = AGE, y = FDT_COUNTING_TIME_Z, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresFDT) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score FDT Counting Time", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 12, face = "bold"),
    plot.subtitle = element_text(size = 12),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 10),
    legend.position = "",
    legend.text = element_text(size = 5)
    )
    

pp5 <- ggplotly(p5, tooltip="text") %>%
  
  layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))


pp5

                                      #  P6


p6 <- data %>% 
  arrange(ID) %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", FDT_CHOOSING_TIME,
                      "\nZ-Score: ", FDT_CHOOSING_TIME_Z, sep="")) %>%
  ggplot(aes(x = AGE, y = FDT_CHOOSING_TIME_Z, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresFDT) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score FDT Chossing Time", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 12, face = "bold"),
    plot.subtitle = element_text(size = 12),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 10),
    legend.position = "",
    legend.text = element_text(size = 5)
    )
    

pp6 <- ggplotly(p6, tooltip="text") %>%
  
  layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))


pp6

                                      # P7


p7<- data %>% 
  arrange(ID) %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", FDT_CHANGING_TIME,
                      "\nZ-Score: ", FDT_CHANGING_TIME_Z, sep="")) %>%
  ggplot(aes(x = AGE, y = FDT_CHANGING_TIME_Z, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresFDT) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score FDT Changing Time", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 12, face = "bold"),
    plot.subtitle = element_text(size = 12),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 10),
    legend.position = "",
    legend.text = element_text(size = 5)
    )
    

pp7 <- ggplotly(p7, tooltip="text") %>%
  
  layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))


pp7

                                      # P8


p8<- data %>% 
  arrange(ID) %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", FDT_INHIBITION,
                      "\nZ-Score: ", FDT_INHIBITION_Z, sep="")) %>%
  ggplot(aes(x = AGE, y = FDT_INHIBITION_Z, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresFDT) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score FDT Inbition", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 12, face = "bold"),
    plot.subtitle = element_text(size = 12),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 10),
    legend.position = "",
    legend.text = element_text(size = 5)
    )

pp8 <- ggplotly(p8, tooltip="text") %>%
  
  layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))


pp8

                                    #   P9

p9<- data %>% 
  arrange(ID) %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", FDT_FLEXIBILITY,
                      "\nZ-Score: ", FDT_FLEXIBILITY_Z, sep="")) %>%
  ggplot(aes(x = AGE, y = FDT_FLEXIBILITY_Z, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresFDT) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score FDT Flexibility", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 12, face = "bold"),
    plot.subtitle = element_text(size = 12),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 10),
    legend.position = "",
    legend.text = element_text(size = 5)
    )
    

pp9 <- ggplotly(p9, tooltip="text") %>%
  
  layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))


pp9
######################################    RAVLTs Zscore  ###############################


data <- readxl::read_xlsx ("RAVLTs_EscoreZ.xlsx")

data

data <- data %>% dplyr::rename(ID = ID...1)

                                        # Filtrando RAVLTs 



p10 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_A1 , RAVLT_A1_Z  )

p11 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_A2 , RAVLT_A2_Z  )

p12 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_A3 , RAVLT_A3_Z )

p13 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_A4 , RAVLT_A4_Z )

p14 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_A5 , RAVLT_A5_Z )

p15 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_B1 , RAVLT_B1_Z )

p16 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_A6 , RAVLT_A6_Z )

p17 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_A7 , RAVLT_A7_Z )

p18 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_TOTALSCORE , RAVLT_TOTALSCORE_Z )

p19 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_REC , RAVLT_REC_Z )

p20 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_RETENTION , RAVLT_RETENTION_Z )

p21 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_PROAT_INTERFERENCE , RAVLT_PROAT_INTERFERENCE_Z )

p22 <- data %>%  select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_RETRO_INTERFERENCE , RAVLT_RETRO_INTERFERENCE_Z )

                                      # P10


coresRAVLT<- c("#7f1c2b", "#9c9ce9")



p10 <- data %>% 
  arrange(ID) %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", RAVLT_A1,
                      "\nZ-Score: ", RAVLT_A1_Z, sep="")) %>%
  ggplot(aes(x = AGE, y = RAVLT_A1_Z, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresRAVLT) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score RAVLT A1", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 12, face = "bold"),
    plot.subtitle = element_text(size = 12),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 10),
    legend.position = "",
    legend.text = element_text(size = 5)
    )
    


pp10 <- ggplotly(p10, tooltip="text") %>%  
  
    layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))

pp10

                                    # P11


p11 <- data %>% 
  arrange(ID) %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", RAVLT_A2,
                      "\nZ-Score: ", RAVLT_A2_Z, sep="")) %>%
  ggplot(aes(x = AGE, y = RAVLT_A2_Z, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresRAVLT) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score RAVLT A2", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 12, face = "bold"),
    plot.subtitle = element_text(size = 12),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 10),
    legend.position = "",
    legend.text = element_text(size = 5)
    )
    

pp11 <- ggplotly(p11, tooltip="text") %>%  
  
    layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))

pp11

                            # P12


p12 <- data %>% 
  arrange(ID) %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", RAVLT_A3,
                      "\nZ-Score: ", RAVLT_A3_Z, sep="")) %>%
  ggplot(aes(x = AGE, y = RAVLT_A3_Z, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresRAVLT) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score RAVLT A3", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 12, face = "bold"),
    plot.subtitle = element_text(size = 12),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 10),
    legend.position = "",
    legend.text = element_text(size = 5)
    )
    

pp12 <- ggplotly(p12, tooltip="text") %>%  
  
    layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))

pp12

                                # P13


p13 <- data %>% 
  arrange(ID) %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", RAVLT_A4,
                      "\nZ-Score: ", RAVLT_A4_Z, sep="")) %>%
  ggplot(aes(x = AGE, y = RAVLT_A4_Z, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresRAVLT) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score RAVLT A4", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 12, face = "bold"),
    plot.subtitle = element_text(size = 12),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 10),
    legend.position = "",
    legend.text = element_text(size = 5)
    )


pp13 <- ggplotly(p13, tooltip="text") %>%  
  
    layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))

pp13

                                  #  P14


p14 <- data %>% 
  arrange(ID) %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", RAVLT_A5,
                      "\nZ-Score: ", RAVLT_A5_Z, sep="")) %>%
  ggplot(aes(x = AGE, y = RAVLT_A5_Z, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresRAVLT) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score RAVLT A4", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 12, face = "bold"),
    plot.subtitle = element_text(size = 12),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 10),
    legend.position = "",
    legend.text = element_text(size = 5)
    )
    

pp14 <- ggplotly(p14, tooltip="text") %>%  
  
    layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))

pp14

                                # P15


p15 <- data %>% 
  arrange(ID) %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", RAVLT_B1,
                      "\nZ-Score: ", RAVLT_B1_Z, sep="")) %>%
  ggplot(aes(x = AGE, y = RAVLT_B1_Z, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresRAVLT) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score RAVLT B1", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 12, face = "bold"),
    plot.subtitle = element_text(size = 12),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 10),
    legend.position = "",
    legend.text = element_text(size = 5)
    )
    

pp15 <- ggplotly(p15, tooltip="text") %>%  
  
    layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))

pp15

                              #  P16


p16 <- data %>% 
  arrange(ID) %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", RAVLT_A6,
                      "\nZ-Score: ", RAVLT_A6_Z, sep="")) %>%
  ggplot(aes(x = AGE, y = RAVLT_A6_Z, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresRAVLT) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score RAVLT A6", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 12, face = "bold"),
    plot.subtitle = element_text(size = 12),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 10),
    legend.position = "",
    legend.text = element_text(size = 5)
    )
    

pp16 <- ggplotly(p16, tooltip="text") %>%  
  
    layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))


pp16

                                  #  P17

p17 <- data %>% 
  arrange(ID) %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", RAVLT_A7,
                      "\nZ-Score: ", RAVLT_A7_Z, sep="")) %>%
  ggplot(aes(x = AGE, y = RAVLT_A7_Z, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresRAVLT) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score RAVLT A7", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 12, face = "bold"),
    plot.subtitle = element_text(size = 12),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 10),
    legend.position = "",
    legend.text = element_text(size = 5)
    )
    

pp17 <- ggplotly(p17, tooltip="text") %>%  
  
    layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))

pp17

                                      # P18

p18 <- data %>% 
  arrange(ID) %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", RAVLT_TOTALSCORE,
                      "\nZ-Score: ", RAVLT_TOTALSCORE_Z, sep="")) %>%
  ggplot(aes(x = AGE, y = RAVLT_TOTALSCORE_Z, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresRAVLT) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score RAVLT Total Score", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 12, face = "bold"),
    plot.subtitle = element_text(size = 12),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 10),
    legend.position = "",
    legend.text = element_text(size = 5)
    )
    

pp18 <- ggplotly(p18, tooltip="text") %>%  
  
    layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))

pp18

                                    # P19

p19 <- data %>% 
  arrange(ID) %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", RAVLT_TOTALSCORE,
                      "\nZ-Score: ", RAVLT_TOTALSCORE_Z, sep="")) %>%
  ggplot(aes(x = AGE, y = RAVLT_TOTALSCORE_Z, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresRAVLT) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score RAVLT Total Score", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 12, face = "bold"),
    plot.subtitle = element_text(size = 12),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 10),
    legend.position = "",
    legend.text = element_text(size = 5)
    )
    

pp19 <- ggplotly(p19, tooltip="text") %>%  
  
    layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))

pp19

                                  # P20

p20 <- data %>% 
  arrange(ID) %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", RAVLT_RETENTION,
                      "\nZ-Score: ", RAVLT_RETENTION_Z, sep="")) %>%
  ggplot(aes(x = AGE, y = RAVLT_RETENTION_Z, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresRAVLT) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score RAVLT Retention", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 12, face = "bold"),
    plot.subtitle = element_text(size = 12),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 10),
    legend.position = "",
    legend.text = element_text(size = 5)
    )
    


pp20 <- ggplotly(p20, tooltip="text") %>%  
  
    layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))


pp20

                                    # P21

p21 <- data %>% 
  arrange(ID) %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", RAVLT_PROAT_INTERFERENCE,
                      "\nZ-Score: ", RAVLT_PROAT_INTERFERENCE_Z, sep="")) %>%
  ggplot(aes(x = AGE, y = RAVLT_PROAT_INTERFERENCE_Z, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresRAVLT) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score RAVLT Proative Interference", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 12, face = "bold"),
    plot.subtitle = element_text(size = 12),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 10),
    legend.position = "",
    legend.text = element_text(size = 5)
    )
    

pp21 <- ggplotly(p21, tooltip="text") %>%  
  
    layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))

pp21

                                      #  P22

p22 <- data %>% 
  arrange(ID) %>% 
  mutate(text = paste("Identification: ", ID , "\nAge: ", AGE , 
                      "\nPoints: ", RAVLT_RETRO_INTERFERENCE,
                      "\nZ-Score: ", RAVLT_RETRO_INTERFERENCE_Z, sep="")) %>%
  ggplot(aes(x = AGE, y = RAVLT_RETRO_INTERFERENCE_Z, fill= GROUP, stroke = 0,
             size = AGE, shape = EDU_LEVEL , text = text)) +
  geom_point(alpha = 0.7,position = "jitter") +
  scale_fill_manual(values = coresRAVLT) +
  scale_size(range = c(2, 5)) +
  scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
  scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
  geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) + 
  geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
  labs(y = "Y", title = "Z Score RAVLT Retroative Interference", shape= "", size = "") +
  theme_classic() +
  
    theme(
      text = element_text(family = "Arial Narrow", size = 11.5),
    plot.title = element_text(size = 12, face = "bold"),
    plot.subtitle = element_text(size = 12),
    strip.text = element_text(size = 12),
    plot.caption = element_text(size = 9, face = "italic"),
    axis.title = element_text(size = 10),
    legend.position = "",
    legend.text = element_text(size = 5)
    )
    

pp22 <- ggplotly(p22, tooltip="text") %>%  
  
    layout(legend = list(x = 0, y = 1.01,
                     title = " ",
                     bgcolor = "#ecf0f1",
                     bordercolor = "white",
                     borderwidth = 1,
                     font = list(size = 9, family = "Arial", color = "black"),
                     orientation = 50,
                     tracegroupgap = 20,
                     traceorder = "normal"
                     ))

pp22
NA
NA

#install.packages('reshape2')
library(ggplot2)
library(dplyr)
library(readxl)
library(reshape2)

Attaching package: ‘reshape2’

The following object is masked from ‘package:tidyr’:

    smiths
getwd()
[1] "C:/Users/felip/Desktop/R/4_analise_"
df <- read_excel("RAVLTs_EscoreZ.xlsx")

colnames(df)
 [1] "ID...1"                     "AGE"                        "EDU_LEVEL"                  "GROUP"                     
 [5] "LIMIT_AGE"                  "RAVLT_A1"                   "RAVLT_A1_Z"                 "ID...8"                    
 [9] "RAVLT_A2"                   "RAVLT_A2_Z"                 "ID...11"                    "RAVLT_A3"                  
[13] "RAVLT_A3_Z"                 "ID...14"                    "RAVLT_A4"                   "RAVLT_A4_Z"                
[17] "ID...17"                    "RAVLT_A5"                   "RAVLT_A5_Z"                 "ID...20"                   
[21] "RAVLT_B1"                   "RAVLT_B1_Z"                 "ID...23"                    "RAVLT_A6"                  
[25] "RAVLT_A6_Z"                 "ID...26"                    "RAVLT_A7"                   "RAVLT_A7_Z"                
[29] "ID...29"                    "RAVLT_REC"                  "RAVLT_REC_Z"                "ID...32"                   
[33] "RAVLT_TOTALSCORE"           "RAVLT_TOTALSCORE_Z"         "ID...35"                    "RAVLT_RETENTION"           
[37] "RAVLT_RETENTION_Z"          "ID...38"                    "RAVLT_PROAT_INTERFERENCE"   "RAVLT_PROAT_INTERFERENCE_Z"
[41] "ID...41"                    "RAVLT_RETRO_INTERFERENCE"   "RAVLT_RETRO_INTERFERENCE_Z"
#1a2887, #799de4

###################################### RegressĂ£o Linear   ##########################################

df.RAVLTs <- df %>% select(GROUP,AGE,RAVLT_A1,RAVLT_A2,RAVLT_A3,RAVLT_A4,RAVLT_A5)


df.melted <- melt(df.RAVLTs, id.vars = c("AGE", "GROUP"), variable.name = "VariĂ¡vel", value.name = "PontuaĂ§Ă£o")

cores <- c("CASE" = "#1a2887", "CONTROL" = "#799de4")

# Criar o grĂ¡fico de linhas
p <- ggplot(df.melted, aes(x = AGE, y = PontuaĂ§Ă£o, color = GROUP)) +
  geom_point(alpha=0.5, position = "jitter", size = 1.5) +
  stat_smooth( method = "lm", span = 0.8, se = F)+
  labs(title = "GrĂ¡fico de Linhas RAVLT por Grupo",
       x = "AGE",
       y = "PontuaĂ§Ă£o RAVLT",
       color = "Grupos") +
  scale_color_manual(values = cores) +
  facet_wrap(~ VariĂ¡vel, scales = "free_y", nrow = 1) +  # SeparaĂ§Ă£o por GROUP (caso e controle)
  theme_minimal()

p
`geom_smooth()` using formula = 'y ~ x'

shapiro.test(df.RAVLTs$RAVLT_A5)

    Shapiro-Wilk normality test

data:  df.RAVLTs$RAVLT_A5
W = 0.95199, p-value = 0.0003236
############################## Médias de Desempenho por Idade #################
library(ggplot2)
library(dplyr)
library(readxl)
library(tidyr)

getwd()
[1] "C:/Users/felip/Desktop/R/4_analise_"
data.ravlt <- read_excel("RAVLTs_EscoreZ.xlsx")

data.ravlt <- data.ravlt %>%  select("AGE","GROUP","RAVLT_A1","RAVLT_A2", "RAVLT_A3","RAVLT_A4", "RAVLT_A5")
                            

data.ravlt <- data.ravlt %>%
  mutate(
    faixa_etaria = case_when(
      AGE >= 18 & AGE <= 20 ~ "18-20",
      AGE >= 21 & AGE <= 30 ~ "21-30",
      AGE >= 21 & AGE <= 30 ~ "21-30",
      AGE >= 31 & AGE <= 40 ~ "31-40",
      AGE >= 41 & AGE <= 50 ~ "41-50",
      TRUE ~ NA_character_
    )
  )

medias_ravlt <- data.ravlt %>%
  group_by(GROUP, faixa_etaria) %>%
  summarise(
    media_RAVLT_A1 = mean(RAVLT_A1, na.rm = TRUE),
    media_RAVLT_A2 = mean(RAVLT_A2, na.rm = TRUE),
    media_RAVLT_A3 = mean(RAVLT_A3, na.rm = TRUE),
    media_RAVLT_A4 = mean(RAVLT_A4, na.rm = TRUE),
    media_RAVLT_A5 = mean(RAVLT_A5, na.rm = TRUE)
  ) %>%
  ungroup()
`summarise()` has grouped output by 'GROUP'. You can override using the `.groups` argument.
medias_ravlt

medias_ravlt <- data.ravlt %>%
  group_by(GROUP, faixa_etaria) %>%
  summarise(
    media_RAVLT_A1 = mean(RAVLT_A1, na.rm = TRUE),
    media_RAVLT_A2 = mean(RAVLT_A2, na.rm = TRUE),
    media_RAVLT_A3 = mean(RAVLT_A3, na.rm = TRUE),
    media_RAVLT_A4 = mean(RAVLT_A4, na.rm = TRUE),
    media_RAVLT_A5 = mean(RAVLT_A5, na.rm = TRUE),
    sd_RAVLT_A1 = sd(RAVLT_A1, na.rm = TRUE),
    sd_RAVLT_A2 = sd(RAVLT_A2, na.rm = TRUE),
    sd_RAVLT_A3 = sd(RAVLT_A3, na.rm = TRUE),
    sd_RAVLT_A4 = sd(RAVLT_A4, na.rm = TRUE),
    sd_RAVLT_A5 = sd(RAVLT_A5, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  pivot_longer(cols = starts_with("media_"), names_to = "RAVLT", values_to = "media") %>%
  pivot_longer(cols = starts_with("sd_"), names_to = "sd_name", values_to = "sd") %>%
  mutate(RAVLT = gsub("media_", "", RAVLT),
         sd_name = gsub("sd_", "", sd_name)) %>%
  filter(RAVLT == sd_name) %>%
  select(-sd_name)
`summarise()` has grouped output by 'GROUP'. You can override using the `.groups` argument.
p <- ggplot(medias_ravlt, aes(x = faixa_etaria, y = media, group = interaction(GROUP, RAVLT), color = RAVLT)) +
  geom_line(aes(linetype = GROUP), size = 1) +  # Diferencia os grupos por tipo de linha
  geom_point(size = 2) +
  geom_errorbar(aes(ymin = media - sd, ymax = media + sd, fill = RAVLT), alpha = 0.2) +
  scale_color_manual(values = c("#01204E", "#028391", "#FF0000", "#FFA27F", "#E59BE9")) +  # Paleta de cores gradiente para RAVLT
  scale_linetype_manual(values = c("solid", "dashed")) +  # Tipos de linha para os grupos
  labs(title = "MĂ©dias dos Valores RAVLT por Grupo e Faixa EtĂ¡ria",
       x = "Faixa EtĂ¡ria",
       y = "Média dos Valores RAVLT",
       color = "RAVLT",
       linetype = "Grupo") +
  theme_minimal()
Warning in geom_errorbar(aes(ymin = media - sd, ymax = media + sd, fill = RAVLT),  :
  Ignoring unknown aesthetics: fill
p



# Criar o grĂ¡fico de linha com sombra para desvio padrĂ£o e facet_wrap
p <- ggplot(medias_ravlt, aes(x = faixa_etaria, y = media, group = GROUP, color = GROUP)) +
  geom_errorbar(aes(ymin = media - sd, ymax = media + sd, fill = GROUP), alpha = 0.6) +
  geom_line(aes(linetype = GROUP), size = 1) +  # Diferencia os grupos por tipo de linha
  geom_point(size = 2) +
  facet_wrap(~ RAVLT, scales = "free_y") +  # Faceta por variĂ¡vel RAVLT
  scale_linetype_manual(values = c("solid", "dashed")) +  # Tipos de linha para os grupos
  scale_y_continuous(limits = c(0, 15)) +  # Ajustar a escala do eixo y
  labs(title = "MĂ©dias dos Valores RAVLT por Grupo e Faixa EtĂ¡ria",
       x = "Faixa EtĂ¡ria",
       y = "Média dos Valores RAVLT",
       color = "Grupo",
       fill = "Grupo",
       linetype = "Grupo") +
  theme_minimal()
Warning in geom_errorbar(aes(ymin = media - sd, ymax = media + sd, fill = GROUP),  :
  Ignoring unknown aesthetics: fill
p


ggsave(filename = "RAVLTs-A1-A5.pdf", plot = p)
Saving 7.29 x 4.5 in image

ggsave(filename = "RAVLTs-regresssao-subdividida.pdf", plot = p)
Saving 7 x 7 in image
LS0tDQp0aXRsZTogIkFuw6FsaXNlIENvbXBsZXRhIGRvcyBEYWRvcyBOZXVyb2NvZ25pdGl2b3MiDQphdXRob3I6ICJSb2RvbHBobyBDb3J0ZXosIEZlbGlwZSBGYWd1bmRlcyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KZGF0ZTogIjIwMjQtMDUtMDYiDQotLS0NCg0KYGBge3IgQm94LXBsb3RzIH0NCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KICBtZXNzYWdlPUZBTFNFLCANCiAgd2FybmluZz1GQUxTRSwNCiAgZmlnLmNhcD0gIkJveCBQbG90cyBUZXN0LVQiKQ0KDQoNCiNpbnN0YWxsLnBhY2thZ2VzKCJnZ3RleHQiKQ0KDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KHRpZHlyKQ0KbGlicmFyeShnZ3B1YnIpDQpsaWJyYXJ5KGdndGV4dCkNCg0KDQpnZXR3ZCgpDQoNCmxpc3QuZmlsZXMoKQ0KDQpkYXRhIDwtIHJlYWR4bDo6cmVhZF9leGNlbCgiQ8OzcGlhIGRlIERBRE9TX0JSVVRPU19DT1ZJRF9MT05HQV9TRVFVRU5DSUFNRU5UTy54bHN4IikNCg0KZGF0YSA8LSBuYS5vbWl0KGRhdGEpDQoNCmRhdGENCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgIFRlc3QuVCBCUEFzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQpwMSA8LSBkYXRhICU+JSAgc2VsZWN0KEdST1VQICwgQlBBX0NPTkNfUE9JTlRTLEJQQV9ESVZJRF9QT0lOVFMsIEJQQV9BTFRFUk5fUE9JTlRTICkNCg0KDQogICAgICMgUmVvcmdhbml6YXIgb3MgZGFkb3MgcGFyYSBvIGZvcm1hdG8gJ2xvbmcnIHVzYW5kbyBhIGZ1bsOnw6NvIHBpdm90X2xvbmdlcigpIGRvIHBhY290ZSB0aWR5cg0KDQpwMV9sb25nIDwtIHRpZHlyOjpwaXZvdF9sb25nZXIocDEsIGNvbHMgPSAtR1JPVVAsIG5hbWVzX3RvID0gIlZhcmlhYmxlIiwgdmFsdWVzX3RvID0gIlZhbHVlIikNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjR3LDoWZpY28gZmFjZXRhZG8gQlBBLUNvbmMsRGl2aWQsQWx0ZXJuLg0KDQpwbG90MSA8LSBnZ3Bsb3QocDFfbG9uZywgYWVzKHggPSBHUk9VUCwgeSA9IFZhbHVlLCBmaWxsID0gR1JPVVApKSArIA0KICAgICAgICANCiAgZ2VvbV9ib3hwbG90KG91dGxpZXIuc2hhcGUgPSBOQSwgYWxwaGEgPSAwLjUsIHdpZHRoID0gMC43LCBjb2VmID0gMCwgbHdkID0gMC40LCBjb2xvciA9ICJibGFjayIpICsNCiAgZ2VvbV9qaXR0ZXIoYWVzKGNvbG9yID0gR1JPVVApLCBzaXplID0gMi41LCB3aWR0aCA9IDAuMTUsIGFscGhhID0gMC41KSArDQogIA0KICBsYWJzKHggPSBOVUxMLCB5ID0gTlVMTCkgKyANCiAgDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiMxYTI4ODciLCAiIzc5OWRlNCIpKSArICANCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiMxYTI4ODciLCAiIzc5OWRlNCIpKSArDQogIA0KICBmYWNldF93cmFwKH4gVmFyaWFibGUsIHNjYWxlcyA9ICJmcmVlX3kiLCANCiAgICAgICAgICAgICBsYWJlbGxlciA9IGxhYmVsbGVyKFZhcmlhYmxlID0gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoQlBBX0NPTkNfUE9JTlRTID0gIkNvbmMgUG9pbnRzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUEFfRElWSURfUE9JTlRTID0gIkRpdmlkIFBvaW50cyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlBBX0FMVEVSTl9QT0lOVFMgPSAiQWx0ZXJuIFBvaW50cyIpKSkgKw0KICANCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMjAsIDEzMCksIGJyZWFrcyA9IHNlcSgyMCwgMTIwLCBieSA9IDIwKSkgKw0KICANCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMCwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMjUsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIpLA0KICAgICAgICBheGlzLmxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMjAsICBmYWNlID0gImJvbGQiKSwNCiAgICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjApLA0KICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwNCiAgICAgICAgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQsICBmYWNlID0gImJvbGQiKSkNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgVGVzdC1UDQoNCnBsb3QxIDwtIHBsb3QxICsgc3RhdF9jb21wYXJlX21lYW5zKG1ldGhvZCA9ICJ0LnRlc3QiLCBsYWJlbC54ID0gMS4zOCkNCg0KcGxvdDENCg0KZ2dzYXZlKCJieHBsb3RfQlBBcy5wZGYiLCBwbG90ID0gcGxvdDEsIHdpZHRoID0gMTMsIGhlaWdodCA9IDEwKQ0KDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI0JQQSBUb3RhbA0KDQpwdG90YWwgPC0gZGF0YSAlPiUgIHNlbGVjdChHUk9VUCAsQlBBX1RPVEFMKQ0KDQojIFJlb3JnYW5pemFyIG9zIGRhZG9zIHBhcmEgbyBmb3JtYXRvICdsb25nJyB1c2FuZG8gYSBmdW7Dp8OjbyBwaXZvdF9sb25nZXIoKSBkbyBwYWNvdGUgdGlkeXINCg0KI3BfYnBhPC0gdGlkeXI6OnBpdm90X2xvbmdlcihwdG90YWwsIGNvbHMgPSAtR1JPVVAsIG5hbWVzX3RvID0gIlZhcmlhYmxlIiwgdmFsdWVzX3RvID0gIlZhbHVlIikNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCnBsb3RvdGFsIDwtIGdncGxvdChwdG90YWwsIGFlcyh4ID0gR1JPVVAsIHkgPSBCUEFfVE9UQUwsIGZpbGwgPSBHUk9VUCkpICsgDQogIA0KICBnZW9tX2JveHBsb3Qob3V0bGllci5zaGFwZSA9IE5BLCBhbHBoYSA9IDAuNSwgd2lkdGggPSAwLjcsIGNvZWYgPSAwLCBsd2QgPSAwLjQsIGNvbG9yID0gImJsYWNrIikgKw0KICBnZW9tX2ppdHRlcihhZXMoY29sb3IgPSBHUk9VUCksIHNpemUgPSAyLjUsIHdpZHRoID0gMC4xNSwgYWxwaGEgPSAwLjUpICsNCiAgDQogIGxhYnMoeCA9IE5VTEwsIHkgPSBOVUxMKSArIA0KICBnZ3RpdGxlKCJUb3RhbCBTY29yZSIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzFhMjg4NyIsICIjNzk5ZGU0IikpICsgIA0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzFhMjg4NyIsICIjNzk5ZGU0IikpICsNCiAgDQogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDEwMCwgNDAwKSwgYnJlYWtzID0gc2VxKDEwMCwgNDAwLCBieSA9IDUwKSkgKw0KICANCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMCwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMjUsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIpLA0KICAgICAgICBheGlzLmxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMjAsICBmYWNlID0gImJvbGQiKSwNCiAgICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjApLA0KICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwNCiAgICAgICAgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQsICBmYWNlID0gImJvbGQiKSkNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgVGVzdC1UDQoNCnBsb3RvdGFsIDwtIHBsb3RvdGFsICsgc3RhdF9jb21wYXJlX21lYW5zKG1ldGhvZCA9ICJ0LnRlc3QiLCBsYWJlbC54ID0gMS4zOCkNCg0KcGxvdG90YWwNCg0KZ2dzYXZlKCJieHBsb3RfQlBBc1RPVEFMLnBkZiIsIHBsb3QgPSBwbG90b3RhbCwgd2lkdGggPSAxMywgaGVpZ2h0ID0gMTApDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgIFRlc3QuVCBGRFRzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoNCmRhdGEgPC0gcmVhZHhsOjpyZWFkX2V4Y2VsKCJDw7NwaWEgZGUgREFET1NfQlJVVE9TX0NPVklEX0xPTkdBX1NFUVVFTkNJQU1FTlRPLnhsc3giKQ0KDQpkYXRhIDwtIG5hLm9taXQoZGF0YSkNCg0KZGF0YQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNGaWx0cmFuZG8gRkRUcw0KDQpwMiA8LSBkYXRhICU+JSAgc2VsZWN0KEdST1VQICwgRkRUX1JFQURJTkdfVElNRSAsRkRUX0NPVU5USU5HX1RJTUUsIEZEVF9DSE9PU0lOR19USU1FLCBGRFRfQ0hBTkdJTkdfVElNRSwNCiAgICAgICAgICAgICAgICAgICAgICAgRkRUX0lOSElCSVRJT04sIEZEVF9GTEVYSUJJTElUWSApDQoNCg0KICAgICAjIFJlb3JnYW5pemFyIG9zIGRhZG9zIHBhcmEgbyBmb3JtYXRvICdsb25nJyB1c2FuZG8gYSBmdW7Dp8OjbyBwaXZvdF9sb25nZXIoKSBkbyBwYWNvdGUgdGlkeXINCg0KcDJfbG9uZyA8LSB0aWR5cjo6cGl2b3RfbG9uZ2VyKHAyLCBjb2xzID0gLUdST1VQLCBuYW1lc190byA9ICJWYXJpYWJsZSIsIHZhbHVlc190byA9ICJWYWx1ZSIpDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBQMg0KDQpwbG90MiA8LSBnZ3Bsb3QocDJfbG9uZywgYWVzKHggPSBHUk9VUCwgeSA9IFZhbHVlLCBmaWxsID0gR1JPVVApKSArIA0KICBnZW9tX2JveHBsb3Qob3V0bGllci5zaGFwZSA9IE5BLCBhbHBoYSA9IDAuNSwgd2lkdGggPSAwLjcsIGNvZWYgPSAwLCBsd2QgPSAwLjQsIGNvbG9yID0gImJsYWNrIikgKw0KICBnZW9tX2ppdHRlcihhZXMoY29sb3IgPSBHUk9VUCksIHNpemUgPSAxLjUsIHdpZHRoID0gMC4xNSwgYWxwaGEgPSAwLjUpICsNCiAgbGFicyh4ID0gTlVMTCwgeSA9IE5VTEwpICsgDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiMxYTI4ODciLCAiIzc5OWRlNCIpKSArICANCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiMxYTI4ODciLCAiIzc5OWRlNCIpKSArDQogIGZhY2V0X3dyYXAofiBWYXJpYWJsZSwgc2NhbGVzID0gImZyZWVfeSIsIA0KICAgICAgICAgICAgIGxhYmVsbGVyID0gbGFiZWxsZXIoVmFyaWFibGUgPSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyhGRFRfUkVBRElOR19USU1FID0gIlJlYWRpbmcgVGltZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkRUX0NPVU5USU5HX1RJTUUgPSAiQ291bnRpbmcgVGltZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkRUX0NIT09TSU5HX1RJTUUgPSAiQ2hvb3NpbmcgVGltZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkRUX0NIQU5HSU5HX1RJTUUgPSAiQ2hhZ2luZyBUaW1lIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRFRfSU5ISUJJVElPTiA9ICAiSW5oaWJpdGlvbiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZEVF9GTEVYSUJJTElUWSA9ICJGbGV4aWJpbGl0eSIpKSkgKw0KICAjc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMjAsIDEzMCksIGJyZWFrcyA9IHNlcSgyMCwgMTAwLCBieSA9IDIwKSkgKw0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE1LCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxOSwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiksDQogICAgICAgIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvciA9ICJibGFjayIpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxLjUsIGZhY2UgPSAiYm9sZCIpLA0KICAgICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFtaWx5ID0gIiIpLA0KICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwNCiAgICAgICAgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQsIGZhY2UgPSAiYm9sZCIpKQ0KDQoNCiMgQWp1c3RlIGFzIGVzY2FsYXMgZGUgYWNvcmRvIGNvbSBvIG3DrW5pbW8gZSBtw6F4aW1vIGRvcyBkYWRvcw0KI3Bsb3QxIDwtIHBsb3QxICsgeWxpbShtaW4ocDFfbG9uZyRWYWx1ZSksIG1heChwMV9sb25nJFZhbHVlKSkNCg0KcGxvdDIgPC0gcGxvdDIgKyBzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gInQudGVzdCIgKQ0KIA0KcGxvdDINCg0KZ2dzYXZlKGZpbGVuYW1lID0gIkZEVHNfdmFsdWVzLnBkZiIsIHBsb3QgPSBwbG90MikNCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICAgIFRlc3QuVCBSQVZMVHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCg0KDQpkYXRhIDwtIHJlYWR4bDo6cmVhZF9leGNlbCgiQ8OzcGlhIGRlIERBRE9TX0JSVVRPU19DT1ZJRF9MT05HQV9TRVFVRU5DSUFNRU5UTy54bHN4IikNCg0KZGF0YSA8LSBuYS5vbWl0KGRhdGEpDQoNCmRhdGENCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjRmlsdHJhbmRvIFJBVkxUcw0KDQoNCnAzIDwtIGRhdGEgJT4lICBzZWxlY3QoR1JPVVAgLCBSQVZMVF9BMSAsUkFWTFRfQTIsIFJBVkxUX0EzLCBSQVZMVF9BNCAgICkNCg0KcDQgPC0gZGF0YSAlPiUgIHNlbGVjdChHUk9VUCAsIFJBVkxUX0E1LCBSQVZMVF9BNiwgUkFWTFRfQTcpDQoNCnA1IDwtIGRhdGEgJT4lICBzZWxlY3QoR1JPVVAgLCBSQVZMVF9UT1RBTFNDT1JFKQ0KDQpwNiA8LSBkYXRhICU+JSAgc2VsZWN0KEdST1VQLFJBVkxUX0IxLFJBVkxUX1JFQyxSQVZMVF9SRVRFTlRJT04pDQoNCnA3IDwtIGRhdGEgJT4lICBzZWxlY3QoR1JPVVAsUkFWTFRfUkVURU5USU9OLFJBVkxUX1JFVFJPX0lOVEVSRkVSRU5DRSkNCg0KDQoNCiAgICAgIyBSZW9yZ2FuaXphciBvcyBkYWRvcyBwYXJhIG8gZm9ybWF0byAnbG9uZycgdXNhbmRvIGEgZnVuw6fDo28gcGl2b3RfbG9uZ2VyKCkgZG8gcGFjb3RlIHRpZHlyDQoNCnAzX2xvbmcgPC0gdGlkeXI6OnBpdm90X2xvbmdlcihwMywgY29scyA9IC1HUk9VUCwgbmFtZXNfdG8gPSAiVmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAiVmFsdWUiKQ0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUDMNCg0KcGxvdDMgPC0gZ2dwbG90KHAzX2xvbmcsIGFlcyh4ID0gR1JPVVAsIHkgPSBWYWx1ZSwgZmlsbCA9IEdST1VQKSkgKyANCiAgZ2VvbV9ib3hwbG90KG91dGxpZXIuc2hhcGUgPSBOQSwgYWxwaGEgPSAwLjUsIHdpZHRoID0gMC43LCBjb2VmID0gMCwgbHdkID0gMC40LCBjb2xvciA9ICJibGFjayIpICsNCiAgZ2VvbV9qaXR0ZXIoYWVzKGNvbG9yID0gR1JPVVApLCBzaXplID0gMS41LCB3aWR0aCA9IDAuMTUsIGFscGhhID0gMC41KSArDQogIGxhYnMoeCA9IE5VTEwsIHkgPSBOVUxMKSArIA0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjMWEyODg3IiwgIiM3OTlkZTQiKSkgKyAgDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMWEyODg3IiwgIiM3OTlkZTQiKSkgKw0KICBmYWNldF93cmFwKH4gVmFyaWFibGUsIHNjYWxlcyA9ICJmcmVlX3kiLCANCiAgICAgICAgICAgICBsYWJlbGxlciA9IGxhYmVsbGVyKFZhcmlhYmxlID0gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoUkFWTFRfQTEgPSAiUkFWTFRfQTEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBVkxUX0EyID0gIiBSQVZMVF9BMiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFWTFRfQTMgPSAiUkFWTFRfQTMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBVkxUX0E0ID0gIlJBVkxUX0E0IikpKSArDQogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDIwKSkgKw0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDExLCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNSwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiksDQogICAgICAgIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvciA9ICJibGFjayIpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCwgZmFjZSA9ICJib2xkIiksDQogICAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCwgZmFjZSA9ICJib2xkIikpDQoNCg0KDQpwbG90MyA8LSBwbG90MyArIHN0YXRfY29tcGFyZV9tZWFucyhtZXRob2QgPSAidC50ZXN0IiAsIGxhYmVsLnkgPSAxOCwgbGFiZWwueCA9IDEuMSkNCg0KcGxvdDMNCg0KZ2dzYXZlKGZpbGVuYW1lID0gIlJBVkxUX3ZhbHVlcy5wZGYiLCBwbG90ID0gcGxvdDMpDQoNCg0KDQogICAgICMgUmVvcmdhbml6YXIgb3MgZGFkb3MgcGFyYSBvIGZvcm1hdG8gJ2xvbmcnIHVzYW5kbyBhIGZ1bsOnw6NvIHBpdm90X2xvbmdlcigpIGRvIHBhY290ZSB0aWR5cg0KDQpwNF9sb25nIDwtIHRpZHlyOjpwaXZvdF9sb25nZXIocDQsIGNvbHMgPSAtR1JPVVAsIG5hbWVzX3RvID0gIlZhcmlhYmxlIiwgdmFsdWVzX3RvID0gIlZhbHVlIikNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFA0DQoNCnBsb3Q0IDwtIGdncGxvdChwNF9sb25nLCBhZXMoeCA9IEdST1VQLCB5ID0gVmFsdWUsIGZpbGwgPSBHUk9VUCkpICsgDQogIGdlb21fYm94cGxvdChvdXRsaWVyLnNoYXBlID0gTkEsIGFscGhhID0gMC41LCB3aWR0aCA9IDAuNywgY29lZiA9IDAsIGx3ZCA9IDAuNCwgY29sb3IgPSAiYmxhY2siKSArDQogIGdlb21faml0dGVyKGFlcyhjb2xvciA9IEdST1VQKSwgc2l6ZSA9IDEuNSwgd2lkdGggPSAwLjE1LCBhbHBoYSA9IDAuNSkgKw0KICBsYWJzKHggPSBOVUxMLCB5ID0gTlVMTCkgKyANCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzFhMjg4NyIsICIjNzk5ZGU0IikpICsgIA0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzFhMjg4NyIsICIjNzk5ZGU0IikpICsNCiAgZmFjZXRfd3JhcCh+IFZhcmlhYmxlLCBzY2FsZXMgPSAiZnJlZV95IiwgDQogICAgICAgICAgICAgbGFiZWxsZXIgPSBsYWJlbGxlcihWYXJpYWJsZSA9IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKFJBVkxUX0E1ID0gIlJBVkxUX0E1IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQVZMVF9BNiA9ICIgUkFWTFRfQTYiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBVkxUX0E3ID0gIlJBVkxUX0E3IikpKSArDQogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDIwKSkgKw0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDExLCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNSwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiksDQogICAgICAgIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvciA9ICJibGFjayIpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCwgZmFjZSA9ICJib2xkIiksDQogICAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCwgZmFjZSA9ICJib2xkIikpDQoNCg0KIyBBanVzdGUgYXMgZXNjYWxhcyBkZSBhY29yZG8gY29tIG8gbcOtbmltbyBlIG3DoXhpbW8gZG9zIGRhZG9zDQojcGxvdDEgPC0gcGxvdDEgKyB5bGltKG1pbihwMV9sb25nJFZhbHVlKSwgbWF4KHAxX2xvbmckVmFsdWUpKQ0KDQpwbG90NCA8LSBwbG90NCArIHN0YXRfY29tcGFyZV9tZWFucyhtZXRob2QgPSAidC50ZXN0IiAsIGxhYmVsLnkgPSAxOCwgbGFiZWwueCA9IDEuMSkNCg0KcGxvdDQNCg0KZ2dzYXZlKGZpbGVuYW1lID0gIlJBVkxUX0E1X0E3LnBkZiIsIHBsb3QgPSBwbG90NCkNCg0KDQoNCiAgICAgIyBSZW9yZ2FuaXphciBvcyBkYWRvcyBwYXJhIG8gZm9ybWF0byAnbG9uZycgdXNhbmRvIGEgZnVuw6fDo28gcGl2b3RfbG9uZ2VyKCkgZG8gcGFjb3RlIHRpZHlyDQoNCnA1X2xvbmcgPC0gdGlkeXI6OnBpdm90X2xvbmdlcihwNSwgY29scyA9IC1HUk9VUCwgbmFtZXNfdG8gPSAiVmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAiVmFsdWUiKQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFA1DQoNCnBsb3Q1IDwtIGdncGxvdChwNV9sb25nLCBhZXMoeCA9IEdST1VQLCB5ID0gVmFsdWUsIGZpbGwgPSBHUk9VUCkpICsgDQogIGdlb21fYm94cGxvdChvdXRsaWVyLnNoYXBlID0gTkEsIGFscGhhID0gMC41LCB3aWR0aCA9IDAuNywgY29lZiA9IDAsIGx3ZCA9IDAuNCwgY29sb3IgPSAiYmxhY2siKSArDQogIGdlb21faml0dGVyKGFlcyhjb2xvciA9IEdST1VQKSwgc2l6ZSA9IDEuNSwgd2lkdGggPSAwLjE1LCBhbHBoYSA9IDAuNSkgKw0KICBsYWJzKHggPSBOVUxMLCB5ID0gTlVMTCkgKyANCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzFhMjg4NyIsICIjNzk5ZGU0IikpICsgIA0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzFhMjg4NyIsICIjNzk5ZGU0IikpICsNCiAgZmFjZXRfd3JhcCh+IFZhcmlhYmxlLCBzY2FsZXMgPSAiZnJlZV95IiwgDQogICAgICAgICAgICAgbGFiZWxsZXIgPSBsYWJlbGxlcihWYXJpYWJsZSA9IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKFJBVkxUX1RPVEFMU0NPUkUgPSAiUkFWTFRfVE9UQUxTQ09SRSIpKSkgKw0KICAjc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMjApKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTEsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE1LCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiKSwNCiAgICAgICAgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG9yID0gImJsYWNrIiksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0LCBmYWNlID0gImJvbGQiKSwNCiAgICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsICksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCwgZmFjZSA9ICJib2xkIikpDQoNCg0KIyBBanVzdGUgYXMgZXNjYWxhcyBkZSBhY29yZG8gY29tIG8gbcOtbmltbyBlIG3DoXhpbW8gZG9zIGRhZG9zDQojcGxvdDEgPC0gcGxvdDEgKyB5bGltKG1pbihwMV9sb25nJFZhbHVlKSwgbWF4KHAxX2xvbmckVmFsdWUpKQ0KDQpwbG90NSA8LSBwbG90NSArIHN0YXRfY29tcGFyZV9tZWFucyhtZXRob2QgPSAidC50ZXN0IiAsICBsYWJlbC55ID0gNjUsIGxhYmVsLnggPTEuNykNCg0KcGxvdDUNCg0KZ2dzYXZlKGZpbGVuYW1lID0gIlJBVkxUX3RvdGFsLnBkZiIsIHBsb3QgPSBwbG90NSkNCg0KDQoNCg0KICAgICAjIFJlb3JnYW5pemFyIG9zIGRhZG9zIHBhcmEgbyBmb3JtYXRvICdsb25nJyB1c2FuZG8gYSBmdW7Dp8OjbyBwaXZvdF9sb25nZXIoKSBkbyBwYWNvdGUgdGlkeXINCg0KcDZfbG9uZyA8LSB0aWR5cjo6cGl2b3RfbG9uZ2VyKHA2LCBjb2xzID0gLUdST1VQLCBuYW1lc190byA9ICJWYXJpYWJsZSIsIHZhbHVlc190byA9ICJWYWx1ZSIpDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUDYNCg0KcGxvdDYgPC0gZ2dwbG90KHA2X2xvbmcsIGFlcyh4ID0gR1JPVVAsIHkgPSBWYWx1ZSwgZmlsbCA9IEdST1VQKSkgKyANCiAgZ2VvbV9ib3hwbG90KG91dGxpZXIuc2hhcGUgPSBOQSwgYWxwaGEgPSAwLjUsIHdpZHRoID0gMC43LCBjb2VmID0gMCwgbHdkID0gMC40LCBjb2xvciA9ICJibGFjayIpICsNCiAgZ2VvbV9qaXR0ZXIoYWVzKGNvbG9yID0gR1JPVVApLCBzaXplID0gMS41LCB3aWR0aCA9IDAuMTUsIGFscGhhID0gMC41KSArDQogIGxhYnMoeCA9IE5VTEwsIHkgPSBOVUxMKSArIA0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjMWEyODg3IiwgIiM3OTlkZTQiKSkgKyAgDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMWEyODg3IiwgIiM3OTlkZTQiKSkgKw0KICBmYWNldF93cmFwKH4gVmFyaWFibGUsIHNjYWxlcyA9ICJmcmVlX3kiLCANCiAgICAgICAgICAgICBsYWJlbGxlciA9IGxhYmVsbGVyKFZhcmlhYmxlID0gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoUkFWTFRfQjEgPSAiUkFWTFRfQjEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBVkxUX1JFQyA9ICIgUkFWTFRfUkVDIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKSArDQogICNzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAyMCkpICsNCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMSwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTUsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIpLA0KICAgICAgICBheGlzLmxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQsICBmYWNlID0gImJvbGQiKSwNCiAgICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwNCiAgICAgICAgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQsIGZhY2UgPSAiYm9sZCIpKQ0KDQoNCiMgQWp1c3RlIGFzIGVzY2FsYXMgZGUgYWNvcmRvIGNvbSBvIG3DrW5pbW8gZSBtw6F4aW1vIGRvcyBkYWRvcw0KI3Bsb3QxIDwtIHBsb3QxICsgeWxpbShtaW4ocDFfbG9uZyRWYWx1ZSksIG1heChwMV9sb25nJFZhbHVlKSkNCg0KcGxvdDYgKyBzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gInQudGVzdCIsIGxhYmVsLnkgPSAxNSwgbGFiZWwueCA9IDEuMSkNCg0KcGxvdDYNCg0KZ2dzYXZlKGZpbGVuYW1lID0gIlJBVkxUX0IxLVJBVkxUX1JFQy5wZGYiLCBwbG90ID0gcGxvdDYpDQoNCg0KICAgICAjIFJlb3JnYW5pemFyIG9zIGRhZG9zIHBhcmEgbyBmb3JtYXRvICdsb25nJyB1c2FuZG8gYSBmdW7Dp8OjbyBwaXZvdF9sb25nZXIoKSBkbyBwYWNvdGUgdGlkeXINCg0KcDdfbG9uZyA8LSB0aWR5cjo6cGl2b3RfbG9uZ2VyKHA3LCBjb2xzID0gLUdST1VQLCBuYW1lc190byA9ICJWYXJpYWJsZSIsIHZhbHVlc190byA9ICJWYWx1ZSIpDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBQNw0KDQpwbG90NyA8LSBnZ3Bsb3QocDdfbG9uZywgYWVzKHggPSBHUk9VUCwgeSA9IFZhbHVlLCBmaWxsID0gR1JPVVApKSArIA0KICBnZW9tX2JveHBsb3Qob3V0bGllci5zaGFwZSA9IE5BLCBhbHBoYSA9IDAuNSwgd2lkdGggPSAwLjcsIGNvZWYgPSAwLCBsd2QgPSAwLjQsIGNvbG9yID0gImJsYWNrIikgKw0KICBnZW9tX2ppdHRlcihhZXMoY29sb3IgPSBHUk9VUCksIHNpemUgPSAxLjUsIHdpZHRoID0gMC4xNSwgYWxwaGEgPSAwLjUpICsNCiAgbGFicyh4ID0gTlVMTCwgeSA9IE5VTEwpICsgDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiMxYTI4ODciLCAiIzc5OWRlNCIpKSArICANCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiMxYTI4ODciLCAiIzc5OWRlNCIpKSArDQogIGZhY2V0X3dyYXAofiBWYXJpYWJsZSwgc2NhbGVzID0gImZyZWVfeSIsIA0KICAgICAgICAgICAgIGxhYmVsbGVyID0gbGFiZWxsZXIoVmFyaWFibGUgPSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYygNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQVZMVF9SRVRFTlRJT04gPSAiUkFWTFRfUkVURU5USU9OIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQVZMVF9SRVRST19JTlRFUkZFUkVOQ0UgPSAiUkFWTFRfUkVUUk9fSU5URVJGRVJFTkNFIikpKSArDQogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDIpKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTEsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE1LCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiKSwNCiAgICAgICAgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG9yID0gImJsYWNrIiksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0LCBmYWNlID0gImJvbGQiKSwNCiAgICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwNCiAgICAgICAgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQsIGZhY2UgPSAiYm9sZCIpKQ0KDQoNCnBsb3Q3ICsgc3RhdF9jb21wYXJlX21lYW5zKG1ldGhvZCA9ICJ0LnRlc3QiICkNCg0KcGxvdDcNCg0KZ2dzYXZlKGZpbGVuYW1lID0gIlJBVkxUX1JFVEVOVElPTi1SQVZMVF9SRVRST19JTlRFUkZFUkVOQ0UucGRmIiwgcGxvdCA9IHBsb3Q3KQ0KDQoNCmBgYA0KDQpgYGB7ciBDYWxjdWxhdGluZ30NCg0KbGlicmFyeSh0aWJibGUpDQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGd0RXh0cmFzKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KHZpcmlkaXMpDQpsaWJyYXJ5KGhyYnJ0aGVtZXMpDQpsaWJyYXJ5KG9wZW54bHN4KQ0KDQoNCiNkYXRhIDwtIHJlYWR4bDo6cmVhZF94bHN4ICgiQlBBc19GRFRzXyBSQVZMVHNfRXNjb3JlWi54bHN4Iiwgc2hlZXQgPSAxKQ0KDQoNCiNpbnN0YWxsLnBhY2thZ2VzKCJ0aWJibGUiKQ0KI2luc3RhbGwucGFja2FnZXMoIm9wZW54bHN4IikNCg0KDQoNCg0KI3NldHdkKCJDOi9Vc2Vycy9Vc2VyL0Rlc2t0b3AvQW5hbHlzaXMgaW4gUi9OZXVyb0NvdmlkIikNCg0KZ2V0d2QoKQ0KDQoNCmRhdGEgPC0gcmVhZHhsOjpyZWFkX3hsc3ggKCJDw7NwaWEgZGUgREFET1NfQlJVVE9TX0NPVklEX0xPTkdBX1NFUVVFTkNJQU1FTlRPLnhsc3giKQ0KDQpkYXRhIDwtIG5hLm9taXQoZGF0YSkNCg0KIA0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBCUEEgWi1TY29yZSAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAxwrogVHJ5DQogICAgICAgICAgICAgICAgICAjIFRFTlRBVElWQSBERSBDUklBw4fDg08gREUgRlVOw4fDg08NCg0KI2NiaW5kKGRhdGEpDQojDQojY2FsY3VsYXJfel9zY29yZSA8LSBmdW5jdGlvbih4LCBtZWRpYSwgZGVzdmlvX3BhZHJhbykgew0KIyAgaWYgKHggPj0gMjEgJiB4IDw9IDMwKSB7DQojICAgIHpfc2NvcmUgPC0gKHggLSBtZWRpYSkgLyBkZXN2aW9fcGFkcmFvDQojICAgIHJldHVybih6X3Njb3JlKQ0KIyAgfQ0KI30NCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMsK6IFRyeQ0KDQojIyBEZWZpbmlyIG9zIHZhbG9yZXMgY29uc3RhbnRlcyBkZSBtw6lkaWEgZSBkZXN2aW8gcGFkcsOjbyBwYXJhIGNhZGEgZmFpeGEgZXTDoXJpYQ0KI2NvbnN0YW50ZXMgPC0gdHJpYmJsZSgNCiMgIH5MSU1JVF9BR0UsIH5tZWRpYV9jb25zdGFudGUsIH5kZXN2aW9fcGFkcmFvX2NvbnN0YW50ZSwNCiMgICIxOC0yMCIsIDg1Ljc5LCAyMi41MywNCiMgICIyMS0zMCIsIDg3LjA4LCAyMS41MCwNCiMgICIzMS00MCIsIDg1LjQ4LCAyMi41NiwNCiMgICI0MS00OSIsIDgwLjcyLCAyMi44NQ0KIykNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDPCuiBUcnkNCiAgIyBDT01Fw4dBUiBEQVFVSSAtLS0tLT4gIERFVEVSTUlOQU5ETyBMSU1JVEVTIEEgU0VSRU0gQVBMSUNBRE9TDQoNCmxpbWl0ZXNfaWRhZGUgPC0gYygxOCwgMjAsIDMwLCA0MCwgNTApDQoNCg0KZGF0YSA8LSBkYXRhICU+JQ0KICBtdXRhdGUoTElNSVRfQUdFID0gY3V0KEFHRSwgYnJlYWtzID0gbGltaXRlc19pZGFkZSwgbGFiZWxzID0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoIjE4LTIwIiwgIjIxLTMwIiwgIjMxLTQwIiwgIjQxLTUwIikpKSAlPiUgDQogIGFycmFuZ2UoQUdFKQ0KICANCmRhdGENCg0KIyBDYWxjdWxhciBvIFotc2NvcmUgdXNhbmRvIGFzIGNvbnN0YW50ZXMgcGFyYSBjYWRhIGZhaXhhIGV0w6FyaWENCg0KDQojQlBBX0NPTkMNCg0KQlBBX0NPTkNfRXNjb3JlWiA8LSBkYXRhICU+JQ0KICBtdXRhdGUoQlBBX0NPTkNfRXNjb3JlWiA9IGNhc2Vfd2hlbigNCiAgICBMSU1JVF9BR0UgPT0gIjE4LTIwIiB+IChCUEFfQ09OQ19QT0lOVFMgLSA4NS43OSkgLyAyMi41MywNCiAgICBMSU1JVF9BR0UgPT0gIjIxLTMwIiB+IChCUEFfQ09OQ19QT0lOVFMgLSA4Ny4wOCkgLyAyMS41MCwNCiAgICBMSU1JVF9BR0UgPT0gIjMxLTQwIiB+IChCUEFfQ09OQ19QT0lOVFMgLSA4NS40OCkgLyAyMi41NiwNCiAgICBMSU1JVF9BR0UgPT0gIjQxLTUwIiB+IChCUEFfQ09OQ19QT0lOVFMgLSA4MC43MikgLyAyMi44NSwNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUNCiAgc2VsZWN0KElELCBBR0UsR1JPVVAsRURVX0xFVkVMLCBMSU1JVF9BR0UsQlBBX0NPTkNfUE9JTlRTLCBCUEFfQ09OQ19Fc2NvcmVaKSAlPiUgDQogIGFycmFuZ2UoSUQpDQoNCkJQQV9DT05DX0VzY29yZVoNCg0KDQojQlBBX0RJVkQNCg0KQlBBX0RJVklEX0VzY29yZVogPC0gZGF0YSAlPiUNCiAgbXV0YXRlKEJQQV9ESVZJRF9Fc2NvcmVaID0gY2FzZV93aGVuKA0KICAgIExJTUlUX0FHRSA9PSAiMTgtMjAiIH4gKEJQQV9ESVZJRF9QT0lOVFMgLSA3OS40MikgLyAyMy40OSwNCiAgICBMSU1JVF9BR0UgPT0gIjIxLTMwIiB+IChCUEFfRElWSURfUE9JTlRTIC0gNzcuMTkpIC8gMjQuNDIsDQogICAgTElNSVRfQUdFID09ICIzMS00MCIgfiAoQlBBX0RJVklEX1BPSU5UUyAtIDcxLjI4KSAvIDI1LjMzLA0KICAgIExJTUlUX0FHRSA9PSAiNDEtNTAiIH4gKEJQQV9ESVZJRF9QT0lOVFMgLSA2MS4yMikgLyAyNi41MywNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUNCiAgc2VsZWN0KElELEJQQV9ESVZJRF9QT0lOVFMsIEJQQV9ESVZJRF9Fc2NvcmVaKSAlPiUgDQogIGFycmFuZ2UoSUQpDQoNCkJQQV9ESVZJRF9Fc2NvcmVaDQoNCg0KI0JQQV9BTFRFUk4NCg0KQlBBX0FMVEVSTl9Fc2NvcmVaIDwtIGRhdGEgJT4lDQogIG11dGF0ZShCUEFfQUxURVJOX0VzY29yZVogPSBjYXNlX3doZW4oDQogICAgTElNSVRfQUdFID09ICIxOC0yMCIgfiAoQlBBX0FMVEVSTl9QT0lOVFMgLSA5My4yMSkgLyAyMS43NiwNCiAgICBMSU1JVF9BR0UgPT0gIjIxLTMwIiB+IChCUEFfQUxURVJOX1BPSU5UUyAtIDg3LjUzKSAvIDIzLjU2LA0KICAgIExJTUlUX0FHRSA9PSAiMzEtNDAiIH4gKEJQQV9BTFRFUk5fUE9JTlRTIC0gODIuMjgpIC8gMjQuODQsDQogICAgTElNSVRfQUdFID09ICI0MS01MCIgfiAoQlBBX0FMVEVSTl9QT0lOVFMgLSA3Mi43MCkgLyAyNS44MCwNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUNCiAgc2VsZWN0KElELEJQQV9BTFRFUk5fUE9JTlRTLCBCUEFfQUxURVJOX0VzY29yZVopICU+JSANCiAgYXJyYW5nZShJRCkNCg0KQlBBX0FMVEVSTl9Fc2NvcmVaIA0KDQoNCiNCUEFfVE9UQUwNCg0KQlBBX1RPVEFMX0VzY29yZVogPC0gZGF0YSAlPiUNCiAgbXV0YXRlKEJQQV9UT1RBTF9Fc2NvcmVaID0gY2FzZV93aGVuKA0KICAgIExJTUlUX0FHRSA9PSAiMTgtMjAiIH4gKEJQQV9UT1RBTCAtIDI1OC40MikgLyA1Ni41OSwNCiAgICBMSU1JVF9BR0UgPT0gIjIxLTMwIiB+IChCUEFfVE9UQUwgLSAyNTEuNzkpIC8gNTguNjEsDQogICAgTElNSVRfQUdFID09ICIzMS00MCIgfiAoQlBBX1RPVEFMIC0gMjM5LjA0KSAvIDYyLjc3LA0KICAgIExJTUlUX0FHRSA9PSAiNDEtNTAiIH4gKEJQQV9UT1RBTCAtIDIxNC42NSkgLyA2NC4zMywNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUgDQogIHNlbGVjdChJRCwgQlBBX1RPVEFMLCBCUEFfVE9UQUxfRXNjb3JlWikgJT4lIA0KICBhcnJhbmdlKGRhdGEkSUQpDQogIA0KDQpCUEFfVE9UQUxfRXNjb3JlWg0KDQoNCg0KQlBBc19Fc2NvcmVaIDwtIGJpbmRfY29scyhCUEFfQ09OQ19Fc2NvcmVaLCBCUEFfRElWSURfRXNjb3JlWiwgQlBBX0FMVEVSTl9Fc2NvcmVaLCBCUEFfVE9UQUxfRXNjb3JlWikgJT4lIA0KICAgICAgICAgIG5hLm9taXQoKQ0KDQp3cml0ZS54bHN4KEJQQXNfRXNjb3JlWiwgZmlsZSA9ICJCUEFzX0VzY29yZVoueGxzeCIpDQoNCg0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRkRUIFotU2NvcmUgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCg0KZGF0YSA8LSByZWFkeGw6OnJlYWRfeGxzeCAoIkPDs3BpYSBkZSBEQURPU19CUlVUT1NfQ09WSURfTE9OR0FfU0VRVUVOQ0lBTUVOVE8ueGxzeCIpDQoNCmRhdGEgPC0gbmEub21pdChkYXRhKQ0KDQoNCiAgICAgICAgICAgICAgICAjIERFVEVSTUlOQU5ETyBMSU1JVEVTIEEgU0VSRU0gQVBMSUNBRE9TDQoNCmxpbWl0ZXNfaWRhZGUgPC0gYygxOCwgMTksIDM0LCA1MCkNCg0KICAgICAgICAgICAgICAgICMgQURJQ0lPTkFORE8gQ09MVU5BIEFPIERBRE8sIFJFTEFDSU9OQURPIEFPUyBMSU1JVEVTIERFU0VKQURPUw0KDQpkYXRhIDwtIGRhdGEgJT4lDQogIG11dGF0ZShMSU1JVF9BR0UgPSBjdXQoQUdFLCBicmVha3MgPSBsaW1pdGVzX2lkYWRlLCBsYWJlbHMgPQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgYygiMTgiLCAiMTktMzQiLCAiMzUtNTAiKSkpICU+JSANCiAgYXJyYW5nZShBR0UpDQogIA0KZGF0YQ0KDQoNCiNGRFQgUkVBRElORw0KDQpGRFRfUkVBRElOR19USU1FX1ogPC0gZGF0YSAlPiUNCiAgbXV0YXRlKEZEVF9SRUFESU5HX1RJTUVfWiA9IGNhc2Vfd2hlbigNCiAgICBMSU1JVF9BR0UgPT0gIjE4IiB+IChGRFRfUkVBRElOR19USU1FIC0gMjAuNCkgLyA0LjEsDQogICAgTElNSVRfQUdFID09ICIxOS0zNCIgfiAoRkRUX1JFQURJTkdfVElNRSAtIDIyKSAvIDUuNiwNCiAgICBMSU1JVF9BR0UgPT0gIjM1LTUwIiB+IChGRFRfUkVBRElOR19USU1FIC0gMjMuOSkgLyA2LjUsDQogICAgVFJVRSB+IE5BX3JlYWxfICAjIENhc28gcGFkcsOjbyBwYXJhIG91dHJhcyBmYWl4YXMgZXTDoXJpYXMNCiAgKSkgJT4lDQogIHNlbGVjdChJRCxBR0UsIEVEVV9MRVZFTCxHUk9VUCwgTElNSVRfQUdFLEZEVF9SRUFESU5HX1RJTUUsICBGRFRfUkVBRElOR19USU1FX1opICU+JSANCiAgYXJyYW5nZShJRCkNCg0KDQpGRFRfUkVBRElOR19USU1FX1oNCg0KDQoNCiNGRFQgQ09VVElORw0KDQpGRFRfQ09VTlRJTkdfVElNRV9aIDwtIGRhdGEgJT4lDQogIG11dGF0ZShGRFRfQ09VTlRJTkdfVElNRV9aID0gY2FzZV93aGVuKA0KICAgIExJTUlUX0FHRSA9PSAiMTgiIH4gKEZEVF9DT1VOVElOR19USU1FIC0gMjMuOCkgLyAzLjUsDQogICAgTElNSVRfQUdFID09ICIxOS0zNCIgfiAoRkRUX0NPVU5USU5HX1RJTUUgLSAyNC4yKSAvIDUuMiwNCiAgICBMSU1JVF9BR0UgPT0gIjM1LTUwIiB+IChGRFRfQ09VTlRJTkdfVElNRSAtIDI3LjEpIC8gNy4yLA0KICAgIFRSVUUgfiBOQV9yZWFsXyAgIyBDYXNvIHBhZHLDo28gcGFyYSBvdXRyYXMgZmFpeGFzIGV0w6FyaWFzDQogICkpICU+JQ0KICBzZWxlY3QoSUQsRkRUX0NPVU5USU5HX1RJTUUsIEZEVF9DT1VOVElOR19USU1FX1opICU+JSANCiAgYXJyYW5nZShJRCkNCg0KDQpGRFRfQ09VTlRJTkdfVElNRV9aDQoNCg0KI0ZEVCBDSE9PU0lORw0KDQpGRFRfQ0hPT1NJTkdfVElNRV9aIDwtIGRhdGEgJT4lDQogIG11dGF0ZShGRFRfQ0hPT1NJTkdfVElNRV9aID0gY2FzZV93aGVuKA0KICAgIExJTUlUX0FHRSA9PSAiMTgiIH4gKEZEVF9DSE9PU0lOR19USU1FIC0gMzQpIC8gNS45LA0KICAgIExJTUlUX0FHRSA9PSAiMTktMzQiIH4gKEZEVF9DSE9PU0lOR19USU1FIC0gMzYuOSkgLyAxMCwNCiAgICBMSU1JVF9BR0UgPT0gIjM1LTUwIiB+IChGRFRfQ0hPT1NJTkdfVElNRSAtIDQxLjcpIC8gMTQuNSwNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUNCiAgc2VsZWN0KElELEZEVF9DSE9PU0lOR19USU1FLCBGRFRfQ0hPT1NJTkdfVElNRV9aKSAlPiUgDQogIGFycmFuZ2UoSUQpDQoNCg0KRkRUX0NIT09TSU5HX1RJTUVfWg0KDQoNCg0KI0ZEVCBDSEFOR0lORw0KDQpGRFRfQ0hBTkdJTkdfVElNRV9aIDwtIGRhdGEgJT4lDQogIG11dGF0ZShGRFRfQ0hBTkdJTkdfVElNRV9aID0gY2FzZV93aGVuKA0KICAgIExJTUlUX0FHRSA9PSAiMTgiIH4gKEZEVF9DSEFOR0lOR19USU1FIC0gNDQuOCkgLyA5LjEsDQogICAgTElNSVRfQUdFID09ICIxOS0zNCIgfiAoRkRUX0NIQU5HSU5HX1RJTUUgLSA0NikgLyAxMywNCiAgICBMSU1JVF9BR0UgPT0gIjM1LTUwIiB+IChGRFRfQ0hBTkdJTkdfVElNRSAtIDUzLjYpIC8gMTguNCwNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUNCiAgc2VsZWN0KElELEZEVF9DSEFOR0lOR19USU1FLCBGRFRfQ0hBTkdJTkdfVElNRV9aKSAlPiUgDQogIGFycmFuZ2UoSUQpDQoNCg0KRkRUX0NIQU5HSU5HX1RJTUVfWg0KDQoNCg0KDQojRkRUIElOSElCSVRJT04NCg0KRkRUX0lOSElCSVRJT05fWiA8LSBkYXRhICU+JQ0KICBtdXRhdGUoRkRUX0lOSElCSVRJT05fWiA9IGNhc2Vfd2hlbigNCiAgICBMSU1JVF9BR0UgPT0gIjE4IiB+IChGRFRfSU5ISUJJVElPTiAtIDEzLjYpIC8gNC45LA0KICAgIExJTUlUX0FHRSA9PSAiMTktMzQiIH4gKEZEVF9JTkhJQklUSU9OIC0gMTQuOCkgLyA4LjMsDQogICAgTElNSVRfQUdFID09ICIzNS01MCIgfiAoRkRUX0lOSElCSVRJT04gLSAxNy44KSAvIDEyLA0KICAgIFRSVUUgfiBOQV9yZWFsXyAgIyBDYXNvIHBhZHLDo28gcGFyYSBvdXRyYXMgZmFpeGFzIGV0w6FyaWFzDQogICkpICU+JQ0KICBzZWxlY3QoSUQsRkRUX0lOSElCSVRJT04sIEZEVF9JTkhJQklUSU9OX1opICU+JSANCiAgYXJyYW5nZShJRCkNCg0KDQpGRFRfSU5ISUJJVElPTl9aDQoNCg0KDQoNCiNGRFQgRkxFWEJJTElUWQ0KDQpGRFRfRkxFWElCSUxJVFlfWiA8LSBkYXRhICU+JQ0KICBtdXRhdGUoRkRUX0ZMRVhJQklMSVRZX1ogPSBjYXNlX3doZW4oDQogICAgTElNSVRfQUdFID09ICIxOCIgfiAoRkRUX0ZMRVhJQklMSVRZIC0gMjQuNCkgLyA3LjgsDQogICAgTElNSVRfQUdFID09ICIxOS0zNCIgfiAoRkRUX0ZMRVhJQklMSVRZIC0gMjMuOSkgLyAxMC44LA0KICAgIExJTUlUX0FHRSA9PSAiMzUtNTAiIH4gKEZEVF9GTEVYSUJJTElUWSAtIDI5LjcpIC8gMTUuNywNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUNCiAgc2VsZWN0KElELEZEVF9GTEVYSUJJTElUWSwgRkRUX0ZMRVhJQklMSVRZX1opICU+JSANCiAgYXJyYW5nZShJRCkNCg0KDQpGRFRfRkxFWElCSUxJVFlfWg0KDQoNCg0KI0JJTkQgQ09MUyBFIFNBTFZBUg0KDQpGRFRfRXNjb3JlWiA8LSBiaW5kX2NvbHMoRkRUX1JFQURJTkdfVElNRV9aLEZEVF9DT1VOVElOR19USU1FX1osRkRUX0NIT09TSU5HX1RJTUVfWiwNCiAgICAgICAgICAgICAgICAgICAgICAgICBGRFRfQ0hBTkdJTkdfVElNRV9aLEZEVF9JTkhJQklUSU9OX1osRkRUX0ZMRVhJQklMSVRZX1opDQoNCg0KDQp3cml0ZS54bHN4KEZEVF9Fc2NvcmVaLCBmaWxlID0gIkZEVF9Fc2NvcmVaLnhsc3giKQ0KDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBSQVZMVFMgWi1TY29yZSAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQpkYXRhIDwtIHJlYWR4bDo6cmVhZF94bHN4ICgiQ8OzcGlhIGRlIERBRE9TX0JSVVRPU19DT1ZJRF9MT05HQV9TRVFVRU5DSUFNRU5UTy54bHN4IikNCg0KZGF0YSA8LSBuYS5vbWl0KGRhdGEpDQoNCg0KDQpsaW1pdGVzX2lkYWRlIDwtIGMoMTgsIDIwLCAzMCwgNDAsIDUwKQ0KDQoNCmRhdGEgPC0gZGF0YSAlPiUNCiAgbXV0YXRlKExJTUlUX0FHRSA9IA0KICAgICAgICAgICBjdXQoQUdFLCBicmVha3MgPSBsaW1pdGVzX2lkYWRlLCBsYWJlbHMgPSANCiAgICAgICAgICAgICAgICAgYygiMTgtMjAiLCAiMjEtMzAiLCAiMzEtNDAiLCAiNDEtNTAiKSkpICU+JSANCiAgYXJyYW5nZShBR0UpIA0KICANCmRhdGENCg0KDQojUkFWTFQgQTENCg0KUkFWTFRfQTFfWiA8LSBkYXRhICU+JQ0KICBtdXRhdGUoUkFWTFRfQTFfWiA9IGNhc2Vfd2hlbigNCiAgICBMSU1JVF9BR0UgPT0gIjE4LTIwIiB+IChSQVZMVF9BMSAtIDYuOCkgLyAxLjcsDQogICAgTElNSVRfQUdFID09ICIyMS0zMCIgfiAoUkFWTFRfQTEgLSA2LjUpIC8gMS43LA0KICAgIExJTUlUX0FHRSA9PSAiMzEtNDAiIH4gKFJBVkxUX0ExIC0gNi4xKSAvIDEuNiwNCiAgICBMSU1JVF9BR0UgPT0gIjQxLTUwIiB+IChSQVZMVF9BMSAtIDYpIC8gMS42LA0KDQogICAgVFJVRSB+IE5BX3JlYWxfICAjIENhc28gcGFkcsOjbyBwYXJhIG91dHJhcyBmYWl4YXMgZXTDoXJpYXMNCiAgKSkgJT4lDQogIHNlbGVjdChJRCwgQUdFLEVEVV9MRVZFTCxHUk9VUCwgTElNSVRfQUdFLFJBVkxUX0ExLCAgUkFWTFRfQTFfWikgJT4lIA0KICBhcnJhbmdlKElEKQ0KDQoNClJBVkxUX0ExX1ogDQoNCg0KDQoNCiNSQVZMVCBBMg0KDQpSQVZMVF9BMl9aIDwtIGRhdGEgJT4lDQogIG11dGF0ZShSQVZMVF9BMl9aID0gY2FzZV93aGVuKA0KICAgIExJTUlUX0FHRSA9PSAiMTgtMjAiIH4gKFJBVkxUX0EyIC0gOS41KSAvIDIuMiwNCiAgICBMSU1JVF9BR0UgPT0gIjIxLTMwIiB+IChSQVZMVF9BMiAtIDguOSkgLyAyLjIsDQogICAgTElNSVRfQUdFID09ICIzMS00MCIgfiAoUkFWTFRfQTIgLSA4LjcpIC8gMiwNCiAgICBMSU1JVF9BR0UgPT0gIjQxLTUwIiB+IChSQVZMVF9BMiAtIDguNSkgLyAyLA0KDQogICAgVFJVRSB+IE5BX3JlYWxfICAjIENhc28gcGFkcsOjbyBwYXJhIG91dHJhcyBmYWl4YXMgZXTDoXJpYXMNCiAgKSkgJT4lDQogIHNlbGVjdChJRCxSQVZMVF9BMiwgUkFWTFRfQTJfWikgJT4lIA0KICBhcnJhbmdlKElEKQ0KDQoNClJBVkxUX0EyX1oNCg0KDQojUkFWTFQgQTMNCg0KUkFWTFRfQTNfWiA8LSBkYXRhICU+JQ0KICBtdXRhdGUoUkFWTFRfQTNfWiA9IGNhc2Vfd2hlbigNCiAgICBMSU1JVF9BR0UgPT0gIjE4LTIwIiB+IChSQVZMVF9BMyAtIDExKSAvIDIuMiwNCiAgICBMSU1JVF9BR0UgPT0gIjIxLTMwIiB+IChSQVZMVF9BMyAtIDEwLjQpIC8gMi40LA0KICAgIExJTUlUX0FHRSA9PSAiMzEtNDAiIH4gKFJBVkxUX0EzIC0gMTAuMykgLyAyLjEsDQogICAgTElNSVRfQUdFID09ICI0MS01MCIgfiAoUkFWTFRfQTMgLSA5LjgpIC8gMi41LA0KDQogICAgVFJVRSB+IE5BX3JlYWxfICAjIENhc28gcGFkcsOjbyBwYXJhIG91dHJhcyBmYWl4YXMgZXTDoXJpYXMNCiAgKSkgJT4lDQogIHNlbGVjdChJRCxSQVZMVF9BMywgUkFWTFRfQTNfWikgJT4lIA0KICBhcnJhbmdlKElEKQ0KDQoNClJBVkxUX0EzX1oNCg0KDQoNCiNSQVZMVCBBNA0KDQpSQVZMVF9BNF9aIDwtIGRhdGEgJT4lDQogIG11dGF0ZShSQVZMVF9BNF9aID0gY2FzZV93aGVuKA0KICAgIExJTUlUX0FHRSA9PSAiMTgtMjAiIH4gKFJBVkxUX0E0IC0gMTEuOCkgLyAyLjQsDQogICAgTElNSVRfQUdFID09ICIyMS0zMCIgfiAoUkFWTFRfQTQgLSAxMS40KSAvIDIuNCwNCiAgICBMSU1JVF9BR0UgPT0gIjMxLTQwIiB+IChSQVZMVF9BNCAtIDExLjQpIC8gMi4xLA0KICAgIExJTUlUX0FHRSA9PSAiNDEtNTAiIH4gKFJBVkxUX0E0IC0gMTAuNykgLyAyLjcsDQoNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUNCiAgc2VsZWN0KElELFJBVkxUX0E0LFJBVkxUX0E0X1opICU+JSANCiAgYXJyYW5nZShJRCkNCg0KDQpSQVZMVF9BNF9aDQoNCg0KDQoNCg0KI1JBVkxUIEE1DQoNClJBVkxUX0E1X1ogPC0gZGF0YSAlPiUNCiAgbXV0YXRlKFJBVkxUX0E1X1ogPSBjYXNlX3doZW4oDQogICAgTElNSVRfQUdFID09ICIxOC0yMCIgfiAoUkFWTFRfQTUgLSAxMi4yKSAvIDIuNCwNCiAgICBMSU1JVF9BR0UgPT0gIjIxLTMwIiB+IChSQVZMVF9BNSAtIDEyLjIpIC8gMi4yLA0KICAgIExJTUlUX0FHRSA9PSAiMzEtNDAiIH4gKFJBVkxUX0E1IC0gMTIuMikgLyAyLjIsDQogICAgTElNSVRfQUdFID09ICI0MS01MCIgfiAoUkFWTFRfQTUgLSAxMS43KSAvIDIuNiwNCg0KICAgIFRSVUUgfiBOQV9yZWFsXyAgIyBDYXNvIHBhZHLDo28gcGFyYSBvdXRyYXMgZmFpeGFzIGV0w6FyaWFzDQogICkpICU+JQ0KICBzZWxlY3QoSUQsUkFWTFRfQTUsIFJBVkxUX0E1X1opICU+JSANCiAgYXJyYW5nZShJRCkNCg0KDQpSQVZMVF9BNV9aDQoNCg0KDQoNCiNSQVZMVCAgQjENCg0KUkFWTFRfQjFfWiA8LSBkYXRhICU+JQ0KICBtdXRhdGUoUkFWTFRfQjFfWiA9IGNhc2Vfd2hlbigNCiAgICBMSU1JVF9BR0UgPT0gIjE4LTIwIiB+IChSQVZMVF9CMSAtIDYuMykgLyAxLjgsDQogICAgTElNSVRfQUdFID09ICIyMS0zMCIgfiAoUkFWTFRfQjEgLSA1LjcpIC8gMS44LA0KICAgIExJTUlUX0FHRSA9PSAiMzEtNDAiIH4gKFJBVkxUX0IxIC0gNS4zKSAvIDEuNiwNCiAgICBMSU1JVF9BR0UgPT0gIjQxLTUwIiB+IChSQVZMVF9CMSAtIDQuOSkgLyAxLjYsDQoNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUNCiAgc2VsZWN0KElELFJBVkxUX0IxLCBSQVZMVF9CMV9aKSAlPiUgDQogIGFycmFuZ2UoSUQpDQoNCg0KUkFWTFRfQjFfWg0KDQoNCg0KI1JBVkxUIEE2DQoNClJBVkxUX0E2X1ogPC0gZGF0YSAlPiUNCiAgbXV0YXRlKFJBVkxUX0E2X1ogPSBjYXNlX3doZW4oDQogICAgTElNSVRfQUdFID09ICIxOC0yMCIgfiAoUkFWTFRfQTYgLSAxMS4xKSAvIDIuNSwNCiAgICBMSU1JVF9BR0UgPT0gIjIxLTMwIiB+IChSQVZMVF9BNiAtIDEwLjkpIC8gMi42LA0KICAgIExJTUlUX0FHRSA9PSAiMzEtNDAiIH4gKFJBVkxUX0E2IC0gMTAuOCkgLyAyLjQsDQogICAgTElNSVRfQUdFID09ICI0MS01MCIgfiAoUkFWTFRfQTYgLSA5LjgpIC8gMi44LA0KDQogICAgVFJVRSB+IE5BX3JlYWxfICAjIENhc28gcGFkcsOjbyBwYXJhIG91dHJhcyBmYWl4YXMgZXTDoXJpYXMNCiAgKSkgJT4lDQogIHNlbGVjdChJRCxSQVZMVF9BNiwgUkFWTFRfQTZfWikgJT4lIA0KICBhcnJhbmdlKElEKQ0KDQoNClJBVkxUX0E2X1oNCg0KDQojUkFWTFQgQTcNCg0KUkFWTFRfQTdfWiA8LSBkYXRhICU+JQ0KICBtdXRhdGUoUkFWTFRfQTdfWiA9IGNhc2Vfd2hlbigNCiAgICBMSU1JVF9BR0UgPT0gIjE4LTIwIiB+IChSQVZMVF9BNyAtIDExKSAvIDIuNywNCiAgICBMSU1JVF9BR0UgPT0gIjIxLTMwIiB+IChSQVZMVF9BNyAtIDEwLjcpIC8gMi43LA0KICAgIExJTUlUX0FHRSA9PSAiMzEtNDAiIH4gKFJBVkxUX0E3IC0gMTAuMykgLyAyLjQsDQogICAgTElNSVRfQUdFID09ICI0MS01MCIgfiAoUkFWTFRfQTcgLSA5LjYpIC8gMi44LA0KDQogICAgVFJVRSB+IE5BX3JlYWxfICAjIENhc28gcGFkcsOjbyBwYXJhIG91dHJhcyBmYWl4YXMgZXTDoXJpYXMNCiAgKSkgJT4lDQogIHNlbGVjdChJRCxSQVZMVF9BNyxSQVZMVF9BN19aKSAlPiUgDQogIGFycmFuZ2UoSUQpDQoNCg0KUkFWTFRfQTdfWg0KDQoNCg0KI1JBVkxUIFJFQw0KDQpSQVZMVF9SRUNfWiA8LSBkYXRhICU+JQ0KICBtdXRhdGUoUkFWTFRfUkVDX1ogPSBjYXNlX3doZW4oDQogICAgTElNSVRfQUdFID09ICIxOC0yMCIgfiAoUkFWTFRfUkVDIC0gMTApIC8gNS43LA0KICAgIExJTUlUX0FHRSA9PSAiMjEtMzAiIH4gKFJBVkxUX1JFQyAtIDExLjQpIC8gNC43LA0KICAgIExJTUlUX0FHRSA9PSAiMzEtNDAiIH4gKFJBVkxUX1JFQyAtIDExLjEpIC8gNC43LA0KICAgIExJTUlUX0FHRSA9PSAiNDEtNTAiIH4gKFJBVkxUX1JFQyAtIDkuOSkgLyA1LjYsDQoNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUNCiAgc2VsZWN0KElELFJBVkxUX1JFQyxSQVZMVF9SRUNfWikgJT4lIA0KICBhcnJhbmdlKElEKQ0KDQoNClJBVkxUX1JFQ19aDQoNCg0KDQojUkFWTFRfVE9UQUxTQ09SRQ0KDQoNClJBVkxUX1RPVEFMU0NPUkVfWiA8LSBkYXRhICU+JQ0KICBtdXRhdGUoUkFWTFRfVE9UQUxTQ09SRV9aID0gY2FzZV93aGVuKA0KICAgIExJTUlUX0FHRSA9PSAiMTgtMjAiIH4gKFJBVkxUX1RPVEFMU0NPUkUgLSA1MS40KSAvIDguNywNCiAgICBMSU1JVF9BR0UgPT0gIjIxLTMwIiB+IChSQVZMVF9UT1RBTFNDT1JFIC0gNDkuMykgLyA4LjYsDQogICAgTElNSVRfQUdFID09ICIzMS00MCIgfiAoUkFWTFRfVE9UQUxTQ09SRSAtIDQ4LjYpIC8gOCwNCiAgICBMSU1JVF9BR0UgPT0gIjQxLTUwIiB+IChSQVZMVF9UT1RBTFNDT1JFIC0gNDYuNykgLyA5LjYsDQoNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUNCiAgc2VsZWN0KElELFJBVkxUX1RPVEFMU0NPUkUsIFJBVkxUX1RPVEFMU0NPUkVfWikgJT4lIA0KICBhcnJhbmdlKElEKQ0KDQpSQVZMVF9UT1RBTFNDT1JFX1oNCg0KDQoNCiNSQVZMVF9BTFQNCg0KUkFWTFRfQUxUX1ogPC0gZGF0YSAlPiUNCiAgbXV0YXRlKFJBVkxUX0FMVF9aID0gY2FzZV93aGVuKA0KICAgIExJTUlUX0FHRSA9PSAiMTgtMjAiIH4gKFJBVkxUX0FMVCAtIDE3LjMpIC8gNy4zLA0KICAgIExJTUlUX0FHRSA9PSAiMjEtMzAiIH4gKFJBVkxUX0FMVCAtIDE2LjgpIC8gNi41LA0KICAgIExJTUlUX0FHRSA9PSAiMzEtNDAiIH4gKFJBVkxUX0FMVCAtIDE3LjkpIC8gNywNCiAgICBMSU1JVF9BR0UgPT0gIjQxLTUwIiB+IChSQVZMVF9BTFQgLSAxNi41KSAvIDcuMywNCg0KICAgIFRSVUUgfiBOQV9yZWFsXyAgIyBDYXNvIHBhZHLDo28gcGFyYSBvdXRyYXMgZmFpeGFzIGV0w6FyaWFzDQogICkpICU+JQ0KICBzZWxlY3QoSUQsUkFWTFRfQUxULCBSQVZMVF9BTFRfWikgJT4lIA0KICBhcnJhbmdlKElEKQ0KDQoNCg0KDQpSQVZMVF9BTFRfWg0KDQoNCg0KI1JBVkxUX1JFVEVOVElPTg0KDQpSQVZMVF9SRVRFTlRJT05fWiA8LSBkYXRhICU+JQ0KICBtdXRhdGUoUkFWTFRfUkVURU5USU9OX1ogPSBjYXNlX3doZW4oDQogICAgTElNSVRfQUdFID09ICIxOC0yMCIgfiAoUkFWTFRfUkVURU5USU9OIC0gMSkgLyAwLjIsDQogICAgTElNSVRfQUdFID09ICIyMS0zMCIgfiAoUkFWTFRfUkVURU5USU9OIC0gMSkgLyAwLjI3LA0KICAgIExJTUlUX0FHRSA9PSAiMzEtNDAiIH4gKFJBVkxUX1JFVEVOVElPTiAtIDAuOTcpIC8gMC4xOSwNCiAgICBMSU1JVF9BR0UgPT0gIjQxLTUwIiB+IChSQVZMVF9SRVRFTlRJT04gLSAxLjAxKSAvIDAuMzQsDQoNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUNCiAgc2VsZWN0KElELFJBVkxUX1JFVEVOVElPTiwgUkFWTFRfUkVURU5USU9OX1opICU+JSANCiAgYXJyYW5nZShJRCkNCg0KDQpSQVZMVF9SRVRFTlRJT05fWg0KDQoNCg0KI1JBVkxUX1BST0FUX0lOVEVSRkVSRU5DRQ0KDQpSQVZMVF9QUk9BVF9JTlRFUkZFUkVOQ0VfWiA8LSBkYXRhICU+JQ0KICBtdXRhdGUoUkFWTFRfUFJPQVRfSU5URVJGRVJFTkNFX1ogPSBjYXNlX3doZW4oDQogICAgTElNSVRfQUdFID09ICIxOC0yMCIgfiAoUkFWTFRfUFJPQVRfSU5URVJGRVJFTkNFIC0gMC45NikgLyAwLjMzLA0KICAgIExJTUlUX0FHRSA9PSAiMjEtMzAiIH4gKFJBVkxUX1BST0FUX0lOVEVSRkVSRU5DRSAtIDAuOTIpIC8gMC4zNywNCiAgICBMSU1JVF9BR0UgPT0gIjMxLTQwIiB+IChSQVZMVF9QUk9BVF9JTlRFUkZFUkVOQ0UgLSAwLjkxKSAvIDAuMzMsDQogICAgTElNSVRfQUdFID09ICI0MS01MCIgfiAoUkFWTFRfUFJPQVRfSU5URVJGRVJFTkNFIC0gMC44NikgLyAwLjMxLA0KDQogICAgVFJVRSB+IE5BX3JlYWxfICAjIENhc28gcGFkcsOjbyBwYXJhIG91dHJhcyBmYWl4YXMgZXTDoXJpYXMNCiAgKSkgJT4lDQogIHNlbGVjdChJRCxSQVZMVF9QUk9BVF9JTlRFUkZFUkVOQ0UsIFJBVkxUX1BST0FUX0lOVEVSRkVSRU5DRV9aKSAlPiUgDQogIGFycmFuZ2UoSUQpDQoNCg0KUkFWTFRfUFJPQVRfSU5URVJGRVJFTkNFX1oNCg0KDQoNCg0KI1JBVkxUX1JFVFJPX0lOVEVSRkVSRU5DRQ0KDQpSQVZMVF9SRVRST19JTlRFUkZFUkVOQ0VfWiA8LSBkYXRhICU+JQ0KICBtdXRhdGUoUkFWTFRfUkVUUk9fSU5URVJGRVJFTkNFX1ogPSBjYXNlX3doZW4oDQogICAgTElNSVRfQUdFID09ICIxOC0yMCIgfiAoUkFWTFRfUkVUUk9fSU5URVJGRVJFTkNFIC0gMC45NikgLyAwLjY4LA0KICAgIExJTUlUX0FHRSA9PSAiMjEtMzAiIH4gKFJBVkxUX1JFVFJPX0lOVEVSRkVSRU5DRSAtIDAuODkpIC8gMC4xNywNCiAgICBMSU1JVF9BR0UgPT0gIjMxLTQwIiB+IChSQVZMVF9SRVRST19JTlRFUkZFUkVOQ0UgLSAwLjk0KSAvIDAuNzQsDQogICAgTElNSVRfQUdFID09ICI0MS01MCIgfiAoUkFWTFRfUkVUUk9fSU5URVJGRVJFTkNFIC0gMC44NCkgLyAwLjE4LA0KDQogICAgVFJVRSB+IE5BX3JlYWxfICAjIENhc28gcGFkcsOjbyBwYXJhIG91dHJhcyBmYWl4YXMgZXTDoXJpYXMNCiAgKSkgJT4lDQogIHNlbGVjdChJRCxSQVZMVF9SRVRST19JTlRFUkZFUkVOQ0UsIFJBVkxUX1JFVFJPX0lOVEVSRkVSRU5DRV9aKSAlPiUgDQogIGFycmFuZ2UoSUQpDQoNCg0KUkFWTFRfUkVUUk9fSU5URVJGRVJFTkNFX1oNCg0KDQoNCg0KI0JJTkQgQ09MUyBFIFNBTFZBUg0KDQpSQVZMVHNfRXNjb3JlWiA8LSBiaW5kX2NvbHMoUkFWTFRfQTFfWiwgUkFWTFRfQTJfWiwgUkFWTFRfQTNfWiwgUkFWTFRfQTRfWiwgUkFWTFRfQTVfWiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQVZMVF9CMV9aLCBSQVZMVF9BNl9aLCBSQVZMVF9BN19aLCBSQVZMVF9SRUNfWiwgUkFWTFRfVE9UQUxTQ09SRV9aLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFWTFRfUkVURU5USU9OX1osIFJBVkxUX1BST0FUX0lOVEVSRkVSRU5DRV9aLCBSQVZMVF9SRVRST19JTlRFUkZFUkVOQ0VfWiApIA0KDQoNCg0Kd3JpdGUueGxzeChSQVZMVHNfRXNjb3JlWiwgZmlsZSA9ICJSQVZMVHNfRXNjb3JlWi54bHN4IikNCg0KDQoNCg0KYGBgDQoNCg0KYGBge3IgQnViYmxlIFBsb3RzfQ0KbGlicmFyeSh0aWJibGUpDQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGd0RXh0cmFzKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KHZpcmlkaXMpDQpsaWJyYXJ5KGhyYnJ0aGVtZXMpDQoNCg0KI3NldHdkKCJDOi9Vc2Vycy9mZWxpcC9EZXNrdG9wL1IvM19hbmFsaXNlIikNCg0KZ2V0d2QoKQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgIEJQQXMgWnNjb3JlICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCmRhdGEgPC0gcmVhZHhsOjpyZWFkX3hsc3ggKCJCUEFzX0VzY29yZVoueGxzeCIsIHNoZWV0ID0gMSkNCg0Kc3VtbWFyeShkYXRhKQ0KY29sbmFtZXMoZGF0YSkNCg0KZGF0YSA8LSBkYXRhICU+JSByZW5hbWUoSUQgPSBJRC4uLjEpICU+JSBzZWxlY3QoLUlELi4uOCwtSUQuLi4xMSwtSUQuLi4xNCkNCiAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGaWx0cmFuZG8gZGFkb3MgQlBBcw0KDQpwMSA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEVEVV9MRVZFTCAsIEFHRSwgQlBBX0NPTkNfUE9JTlRTICwgQlBBX0NPTkNfRXNjb3JlWiAgKQ0KDQpwMiA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEVEVV9MRVZFTCwgQUdFLCBCUEFfRElWSURfUE9JTlRTICwgQlBBX0RJVklEX0VzY29yZVogICkNCg0KcDMgPC0gZGF0YSAlPiUgIHNlbGVjdChJRCxFRFVfTEVWRUwgLEdST1VQICxFRFVfTEVWRUwgLEFHRSwgQlBBX0FMVEVSTl9QT0lOVFMgLCBCUEFfQUxURVJOX0VzY29yZVogKQ0KDQpwdG90YWwgPC0gZGF0YSAlPiUgIHNlbGVjdChJRCxFRFVfTEVWRUwgLEdST1VQICxFRFVfTEVWRUwgLEFHRSwgQlBBX0FMVEVSTl9QT0lOVFMgLCBCUEFfQUxURVJOX0VzY29yZVogKQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgUDEgIA0KICANCg0KY29yZXNCUEEgPC0gYygiIzFhMjg4NyIsICIjNzk5ZGU0IikNCg0KDQoNCnAxIDwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBCUEFfQ09OQ19QT0lOVFMsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgQlBBX0NPTkNfRXNjb3JlWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IEJQQV9DT05DX0VzY29yZVosIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcscG9zaXRpb24gPSAiaml0dGVyIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc0JQQSkgKw0KICBzY2FsZV9zaXplKHJhbmdlID0gYygyLCA1KSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJBZ2UiLCBsaW1pdHMgPSBjKDEwLCA1MiksIGJyZWFrcyA9IHNlcSgxMCwgNTAsIGJ5ID0gMTApKSArDQogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIlogU2NvcmUiLCBsaW1pdHMgPSBjKC0zLCAzKSwgYnJlYWtzID0gc2VxKC0zLCAzKSkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAtMzozLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4xKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBhbHBoYSA9IDAuMywgbGluZXR5cGUgPSAiIikgKw0KICBsYWJzKHkgPSAiWSIsIHRpdGxlID0gIlogU2NvcmUgRm9jdXNlZCBBdHRlbnRpb24iLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxOCwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTgsZmFjZSA9ICJib2xkIiksDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNSksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIiIsDQogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDUpDQogICAgKQ0KICAgIA0KICAgICAgICAgICAgIyBHcsOhZmljbyBpbnRlcmF0aXZvIGRhIGJpYmxpb3RleGEgZ2dwbG90dGx5DQoNCnBwMSA8LSBnZ3Bsb3RseShwMSwgdG9vbHRpcD0idGV4dCIpICU+JQ0KICANCiAgbGF5b3V0KGxlZ2VuZCA9IGxpc3QoeCA9IDAsIHkgPSAxLjAxLA0KICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiICIsDQogICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gIiNlY2YwZjEiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyY29sb3IgPSAid2hpdGUiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGggPSAxLA0KICAgICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3Qoc2l6ZSA9IDksIGZhbWlseSA9ICJBcmlhbCIsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IDUwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2Vncm91cGdhcCA9IDIwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2VvcmRlciA9ICJub3JtYWwiDQogICAgICAgICAgICAgICAgICAgICApKQ0KICANCg0KcHAxDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFAyDQoNCnAyIDwtIGRhdGEgJT4lDQogIGFycmFuZ2UoSUQpICU+JQ0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgQlBBX0RJVklEX1BPSU5UUywNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBCUEFfRElWSURfRXNjb3JlWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IEJQQV9ESVZJRF9Fc2NvcmVaLCBmaWxsPSBHUk9VUCwgc3Ryb2tlID0gMCwNCiAgICAgICAgICAgICBzaXplID0gQUdFLCBzaGFwZSA9IEVEVV9MRVZFTCAsIHRleHQgPSB0ZXh0KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC43LCBwb3NpdGlvbiA9ICJqaXR0ZXIiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzQlBBKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBEaXZpZCBBdHRlbnRpb24iLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxOCwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTgsZmFjZSA9ICJib2xkIiksDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNSksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIiIsDQogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDUpDQogICAgKQ0KICAgIA0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAjIEdyw6FmaWNvIGludGVyYXRpdm8gZGEgYmlibGlvdGV4YSBnZ3Bsb3R0bHkNCg0KcHAyIDwtIGdncGxvdGx5KHAyLCB0b29sdGlwPSJ0ZXh0IikgJT4lICANCiANCiAgIGxheW91dChsZWdlbmQgPSBsaXN0KHggPSAwLCB5ID0gMS4wMSwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiICIsDQogICAgICAgICAgICAgICAgICAgIGJnY29sb3IgPSAiI2VjZjBmMSIsDQogICAgICAgICAgICAgICAgICAgIGJvcmRlcmNvbG9yID0gIndoaXRlIiwNCiAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGggPSAxLA0KICAgICAgICAgICAgICAgICAgICBmb250ID0gbGlzdChzaXplID0gOSwgZmFtaWx5ID0gIkFyaWFsIiwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPSA1MCwNCiAgICAgICAgICAgICAgICAgICAgdHJhY2Vncm91cGdhcCA9IDIwLA0KICAgICAgICAgICAgICAgICAgICB0cmFjZW9yZGVyID0gIm5vcm1hbCINCiAgICAgICAgICAgICAgICAgICAgKSkNCiANCnBwMiANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgUDMNCg0KcDMgPC0gZGF0YSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBCUEFfQUxURVJOX1BPSU5UUywNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBCUEFfQUxURVJOX0VzY29yZVosIHNlcD0iIikpICU+JQ0KICANCiAgZ2dwbG90KGFlcyh4ID0gQUdFLCB5ID0gQlBBX0FMVEVSTl9Fc2NvcmVaLCBmaWxsPSBHUk9VUCwgc3Ryb2tlID0gMCwNCiAgICAgICAgICAgICBzaXplID0gQUdFLCBzaGFwZSA9IEVEVV9MRVZFTCAsIHRleHQgPSB0ZXh0KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC43LHBvc2l0aW9uID0gImppdHRlciIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29yZXNCUEEpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIEFsdGVybiBBdHRlbnRpb24iLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxOCwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTgsZmFjZSA9ICJib2xkIiksDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNSksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIiIsDQogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDUpDQogICAgKQ0KICANCg0KICAgICAgICAgICAgICAgICAgICAjIEdyw6FmaWNvIGludGVyYXRpdm8gZGEgYmlibGlvdGV4YSBnZ3Bsb3R0bHkNCg0KcHAzIDwtICBnZ3Bsb3RseShwMywgdG9vbHRpcD0idGV4dCIpICU+JSAgDQogIA0KICAgIGxheW91dChsZWdlbmQgPSBsaXN0KHggPSAwLCB5ID0gMS4wMSwNCiAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIiAiLA0KICAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICIjZWNmMGYxIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcmNvbG9yID0gIndoaXRlIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcndpZHRoID0gMSwNCiAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSBsaXN0KHNpemUgPSA5LCBmYW1pbHkgPSAiQXJpYWwiLCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPSA1MCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlZ3JvdXBnYXAgPSAyMCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlb3JkZXIgPSAibm9ybWFsIg0KICAgICAgICAgICAgICAgICAgICAgKSkNCg0KDQpwcDMNCg0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNCUEFfVE9UQUwNCg0KcHRvdGFsIDwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBCUEFfVE9UQUwsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgQlBBX1RPVEFMX0VzY29yZVosIHNlcD0iIikpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBBR0UsIHkgPSBCUEFfVE9UQUxfRXNjb3JlWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNyxwb3NpdGlvbiA9ICJqaXR0ZXIiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzQlBBKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBUb3RhbCIsIHNoYXBlPSAiIiwgc2l6ZSA9ICIiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIA0KICAgIHRoZW1lKA0KICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwgTmFycm93Iiwgc2l6ZSA9IDExLjUpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE4LCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxOCxmYWNlID0gImJvbGQiKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE1KSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQogICAgICAgICAgICAjIEdyw6FmaWNvIGludGVyYXRpdm8gZGEgYmlibGlvdGV4YSBnZ3Bsb3R0bHkNCg0KcHB0b3RhbCA8LSBnZ3Bsb3RseShwdG90YWwsIHRvb2x0aXA9InRleHQiKSAlPiUNCiAgDQogIGxheW91dChsZWdlbmQgPSBsaXN0KHggPSAwLCB5ID0gMS4wMSwNCiAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIiAiLA0KICAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICIjZWNmMGYxIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcmNvbG9yID0gIndoaXRlIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcndpZHRoID0gMSwNCiAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSBsaXN0KHNpemUgPSA5LCBmYW1pbHkgPSAiQXJpYWwiLCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPSA1MCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlZ3JvdXBnYXAgPSAyMCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlb3JkZXIgPSAibm9ybWFsIg0KICAgICAgICAgICAgICAgICAgICAgKSkNCiAgDQoNCnBwdG90YWwNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICAgRkRUcyBac2NvcmUgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KZGF0YSA8LSByZWFkeGw6OnJlYWRfZXhjZWwoIkZEVF9Fc2NvcmVaLnhsc3giKQ0KDQpkYXRhIDwtIG5hLm9taXQoZGF0YSkNCg0KY29sbmFtZXMoZGF0YSkNCg0KZGF0YSA8LSBkYXRhICU+JSByZW5hbWUoSUQgPSBJRC4uLjEpDQoNCmRhdGENCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIEZpbHRyYW5kbyBGRFRzIA0KDQoNCg0KcDQgPC0gZGF0YSAlPiUgIHNlbGVjdChJRCxFRFVfTEVWRUwgLEdST1VQICxBR0UsIEZEVF9SRUFESU5HX1RJTUUgLCBGRFRfUkVBRElOR19USU1FX1ogICkNCg0KcDUgPC0gZGF0YSAlPiUgIHNlbGVjdChJRCxFRFVfTEVWRUwgLEdST1VQICxBR0UsIEZEVF9DT1VOVElOR19USU1FICwgRkRUX0NPVU5USU5HX1RJTUVfWiAgKQ0KDQpwNiA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgRkRUX0NIT09TSU5HX1RJTUUgLCBGRFRfQ0hPT1NJTkdfVElNRV9aICkNCg0KcDcgPC0gZGF0YSAlPiUgIHNlbGVjdChJRCxFRFVfTEVWRUwgLEdST1VQICxBR0UsIEZEVF9DSEFOR0lOR19USU1FICwgRkRUX0NIQU5HSU5HX1RJTUVfWiApDQoNCnA4IDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsQUdFLCBGRFRfSU5ISUJJVElPTiAsIEZEVF9JTkhJQklUSU9OX1ogKQ0KDQpwOSA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgRkRUX0ZMRVhJQklMSVRZICwgRkRUX0ZMRVhJQklMSVRZX1ogKQ0KDQoNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIFA0DQoNCg0KY29yZXNGRFQgPC0gYygiI2Y2YTNhYiIsICIjMWFiNmFjIikNCg0KDQoNCnA0IDwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBGRFRfUkVBRElOR19USU1FLA0KICAgICAgICAgICAgICAgICAgICAgICJcblotU2NvcmU6ICIsIEZEVF9SRUFESU5HX1RJTUVfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IEZEVF9SRUFESU5HX1RJTUVfWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNyxwb3NpdGlvbiA9ICJqaXR0ZXIiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzRkRUKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBGRFQgUmVhZGluZyBUaW1lIiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCnBwNCA8LSBnZ3Bsb3RseShwNCwgdG9vbHRpcD0idGV4dCIpICU+JQ0KICANCiAgbGF5b3V0KGxlZ2VuZCA9IGxpc3QoeCA9IDAsIHkgPSAxLjAxLA0KICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiICIsDQogICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gIiNlY2YwZjEiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyY29sb3IgPSAid2hpdGUiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGggPSAxLA0KICAgICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3Qoc2l6ZSA9IDksIGZhbWlseSA9ICJBcmlhbCIsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IDUwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2Vncm91cGdhcCA9IDIwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2VvcmRlciA9ICJub3JtYWwiDQogICAgICAgICAgICAgICAgICAgICApKQ0KDQoNCnBwNA0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgUDUNCg0KcDUgPC0gZGF0YSAlPiUgDQogIGFycmFuZ2UoSUQpICU+JSANCiAgbXV0YXRlKHRleHQgPSBwYXN0ZSgiSWRlbnRpZmljYXRpb246ICIsIElEICwgIlxuQWdlOiAiLCBBR0UgLCANCiAgICAgICAgICAgICAgICAgICAgICAiXG5Qb2ludHM6ICIsIEZEVF9DT1VOVElOR19USU1FLA0KICAgICAgICAgICAgICAgICAgICAgICJcblotU2NvcmU6ICIsIEZEVF9DT1VOVElOR19USU1FX1osIHNlcD0iIikpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBBR0UsIHkgPSBGRFRfQ09VTlRJTkdfVElNRV9aLCBmaWxsPSBHUk9VUCwgc3Ryb2tlID0gMCwNCiAgICAgICAgICAgICBzaXplID0gQUdFLCBzaGFwZSA9IEVEVV9MRVZFTCAsIHRleHQgPSB0ZXh0KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC43LHBvc2l0aW9uID0gImppdHRlciIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29yZXNGRFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIEZEVCBDb3VudGluZyBUaW1lIiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCnBwNSA8LSBnZ3Bsb3RseShwNSwgdG9vbHRpcD0idGV4dCIpICU+JQ0KICANCiAgbGF5b3V0KGxlZ2VuZCA9IGxpc3QoeCA9IDAsIHkgPSAxLjAxLA0KICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiICIsDQogICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gIiNlY2YwZjEiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyY29sb3IgPSAid2hpdGUiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGggPSAxLA0KICAgICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3Qoc2l6ZSA9IDksIGZhbWlseSA9ICJBcmlhbCIsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IDUwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2Vncm91cGdhcCA9IDIwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2VvcmRlciA9ICJub3JtYWwiDQogICAgICAgICAgICAgICAgICAgICApKQ0KDQoNCnBwNQ0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgUDYNCg0KDQpwNiA8LSBkYXRhICU+JSANCiAgYXJyYW5nZShJRCkgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgRkRUX0NIT09TSU5HX1RJTUUsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgRkRUX0NIT09TSU5HX1RJTUVfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IEZEVF9DSE9PU0lOR19USU1FX1osIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcscG9zaXRpb24gPSAiaml0dGVyIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc0ZEVCkgKw0KICBzY2FsZV9zaXplKHJhbmdlID0gYygyLCA1KSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJBZ2UiLCBsaW1pdHMgPSBjKDEwLCA1MiksIGJyZWFrcyA9IHNlcSgxMCwgNTAsIGJ5ID0gMTApKSArDQogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIlogU2NvcmUiLCBsaW1pdHMgPSBjKC0zLCAzKSwgYnJlYWtzID0gc2VxKC0zLCAzKSkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAtMzozLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4xKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBhbHBoYSA9IDAuMywgbGluZXR5cGUgPSAiIikgKw0KICBsYWJzKHkgPSAiWSIsIHRpdGxlID0gIlogU2NvcmUgRkRUIENob3NzaW5nIFRpbWUiLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhY2UgPSAiaXRhbGljIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICIiLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KQ0KICAgICkNCiAgICANCg0KcHA2IDwtIGdncGxvdGx5KHA2LCB0b29sdGlwPSJ0ZXh0IikgJT4lDQogIA0KICBsYXlvdXQobGVnZW5kID0gbGlzdCh4ID0gMCwgeSA9IDEuMDEsDQogICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICIgIiwNCiAgICAgICAgICAgICAgICAgICAgIGJnY29sb3IgPSAiI2VjZjBmMSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJjb2xvciA9ICJ3aGl0ZSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJ3aWR0aCA9IDEsDQogICAgICAgICAgICAgICAgICAgICBmb250ID0gbGlzdChzaXplID0gOSwgZmFtaWx5ID0gIkFyaWFsIiwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uID0gNTAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZWdyb3VwZ2FwID0gMjAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZW9yZGVyID0gIm5vcm1hbCINCiAgICAgICAgICAgICAgICAgICAgICkpDQoNCg0KcHA2DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFA3DQoNCg0KcDc8LSBkYXRhICU+JSANCiAgYXJyYW5nZShJRCkgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgRkRUX0NIQU5HSU5HX1RJTUUsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgRkRUX0NIQU5HSU5HX1RJTUVfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IEZEVF9DSEFOR0lOR19USU1FX1osIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcscG9zaXRpb24gPSAiaml0dGVyIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc0ZEVCkgKw0KICBzY2FsZV9zaXplKHJhbmdlID0gYygyLCA1KSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJBZ2UiLCBsaW1pdHMgPSBjKDEwLCA1MiksIGJyZWFrcyA9IHNlcSgxMCwgNTAsIGJ5ID0gMTApKSArDQogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIlogU2NvcmUiLCBsaW1pdHMgPSBjKC0zLCAzKSwgYnJlYWtzID0gc2VxKC0zLCAzKSkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAtMzozLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4xKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBhbHBoYSA9IDAuMywgbGluZXR5cGUgPSAiIikgKw0KICBsYWJzKHkgPSAiWSIsIHRpdGxlID0gIlogU2NvcmUgRkRUIENoYW5naW5nIFRpbWUiLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhY2UgPSAiaXRhbGljIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICIiLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KQ0KICAgICkNCiAgICANCg0KcHA3IDwtIGdncGxvdGx5KHA3LCB0b29sdGlwPSJ0ZXh0IikgJT4lDQogIA0KICBsYXlvdXQobGVnZW5kID0gbGlzdCh4ID0gMCwgeSA9IDEuMDEsDQogICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICIgIiwNCiAgICAgICAgICAgICAgICAgICAgIGJnY29sb3IgPSAiI2VjZjBmMSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJjb2xvciA9ICJ3aGl0ZSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJ3aWR0aCA9IDEsDQogICAgICAgICAgICAgICAgICAgICBmb250ID0gbGlzdChzaXplID0gOSwgZmFtaWx5ID0gIkFyaWFsIiwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uID0gNTAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZWdyb3VwZ2FwID0gMjAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZW9yZGVyID0gIm5vcm1hbCINCiAgICAgICAgICAgICAgICAgICAgICkpDQoNCg0KcHA3DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFA4DQoNCg0KcDg8LSBkYXRhICU+JSANCiAgYXJyYW5nZShJRCkgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgRkRUX0lOSElCSVRJT04sDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgRkRUX0lOSElCSVRJT05fWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IEZEVF9JTkhJQklUSU9OX1osIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcscG9zaXRpb24gPSAiaml0dGVyIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc0ZEVCkgKw0KICBzY2FsZV9zaXplKHJhbmdlID0gYygyLCA1KSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJBZ2UiLCBsaW1pdHMgPSBjKDEwLCA1MiksIGJyZWFrcyA9IHNlcSgxMCwgNTAsIGJ5ID0gMTApKSArDQogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIlogU2NvcmUiLCBsaW1pdHMgPSBjKC0zLCAzKSwgYnJlYWtzID0gc2VxKC0zLCAzKSkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAtMzozLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4xKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBhbHBoYSA9IDAuMywgbGluZXR5cGUgPSAiIikgKw0KICBsYWJzKHkgPSAiWSIsIHRpdGxlID0gIlogU2NvcmUgRkRUIEluYml0aW9uIiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQoNCnBwOCA8LSBnZ3Bsb3RseShwOCwgdG9vbHRpcD0idGV4dCIpICU+JQ0KICANCiAgbGF5b3V0KGxlZ2VuZCA9IGxpc3QoeCA9IDAsIHkgPSAxLjAxLA0KICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiICIsDQogICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gIiNlY2YwZjEiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyY29sb3IgPSAid2hpdGUiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGggPSAxLA0KICAgICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3Qoc2l6ZSA9IDksIGZhbWlseSA9ICJBcmlhbCIsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IDUwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2Vncm91cGdhcCA9IDIwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2VvcmRlciA9ICJub3JtYWwiDQogICAgICAgICAgICAgICAgICAgICApKQ0KDQoNCnBwOA0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBQOQ0KDQpwOTwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBGRFRfRkxFWElCSUxJVFksDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgRkRUX0ZMRVhJQklMSVRZX1osIHNlcD0iIikpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBBR0UsIHkgPSBGRFRfRkxFWElCSUxJVFlfWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNyxwb3NpdGlvbiA9ICJqaXR0ZXIiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzRkRUKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBGRFQgRmxleGliaWxpdHkiLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhY2UgPSAiaXRhbGljIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICIiLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KQ0KICAgICkNCiAgICANCg0KcHA5IDwtIGdncGxvdGx5KHA5LCB0b29sdGlwPSJ0ZXh0IikgJT4lDQogIA0KICBsYXlvdXQobGVnZW5kID0gbGlzdCh4ID0gMCwgeSA9IDEuMDEsDQogICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICIgIiwNCiAgICAgICAgICAgICAgICAgICAgIGJnY29sb3IgPSAiI2VjZjBmMSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJjb2xvciA9ICJ3aGl0ZSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJ3aWR0aCA9IDEsDQogICAgICAgICAgICAgICAgICAgICBmb250ID0gbGlzdChzaXplID0gOSwgZmFtaWx5ID0gIkFyaWFsIiwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uID0gNTAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZWdyb3VwZ2FwID0gMjAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZW9yZGVyID0gIm5vcm1hbCINCiAgICAgICAgICAgICAgICAgICAgICkpDQoNCg0KcHA5DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgICBSQVZMVHMgWnNjb3JlICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCg0KZGF0YSA8LSByZWFkeGw6OnJlYWRfeGxzeCAoIlJBVkxUc19Fc2NvcmVaLnhsc3giKQ0KDQpkYXRhDQoNCmRhdGEgPC0gZGF0YSAlPiUgZHBseXI6OnJlbmFtZShJRCA9IElELi4uMSkNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRmlsdHJhbmRvIFJBVkxUcyANCg0KDQoNCnAxMCA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgUkFWTFRfQTEgLCBSQVZMVF9BMV9aICApDQoNCnAxMSA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgUkFWTFRfQTIgLCBSQVZMVF9BMl9aICApDQoNCnAxMiA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgUkFWTFRfQTMgLCBSQVZMVF9BM19aICkNCg0KcDEzIDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsQUdFLCBSQVZMVF9BNCAsIFJBVkxUX0E0X1ogKQ0KDQpwMTQgPC0gZGF0YSAlPiUgIHNlbGVjdChJRCxFRFVfTEVWRUwgLEdST1VQICxBR0UsIFJBVkxUX0E1ICwgUkFWTFRfQTVfWiApDQoNCnAxNSA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgUkFWTFRfQjEgLCBSQVZMVF9CMV9aICkNCg0KcDE2IDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsQUdFLCBSQVZMVF9BNiAsIFJBVkxUX0E2X1ogKQ0KDQpwMTcgPC0gZGF0YSAlPiUgIHNlbGVjdChJRCxFRFVfTEVWRUwgLEdST1VQICxBR0UsIFJBVkxUX0E3ICwgUkFWTFRfQTdfWiApDQoNCnAxOCA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgUkFWTFRfVE9UQUxTQ09SRSAsIFJBVkxUX1RPVEFMU0NPUkVfWiApDQoNCnAxOSA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgUkFWTFRfUkVDICwgUkFWTFRfUkVDX1ogKQ0KDQpwMjAgPC0gZGF0YSAlPiUgIHNlbGVjdChJRCxFRFVfTEVWRUwgLEdST1VQICxBR0UsIFJBVkxUX1JFVEVOVElPTiAsIFJBVkxUX1JFVEVOVElPTl9aICkNCg0KcDIxIDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsQUdFLCBSQVZMVF9QUk9BVF9JTlRFUkZFUkVOQ0UgLCBSQVZMVF9QUk9BVF9JTlRFUkZFUkVOQ0VfWiApDQoNCnAyMiA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgUkFWTFRfUkVUUk9fSU5URVJGRVJFTkNFICwgUkFWTFRfUkVUUk9fSU5URVJGRVJFTkNFX1ogKQ0KDQoNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUDEwDQoNCg0KY29yZXNSQVZMVDwtIGMoIiM3ZjFjMmIiLCAiIzljOWNlOSIpDQoNCg0KDQpwMTAgPC0gZGF0YSAlPiUgDQogIGFycmFuZ2UoSUQpICU+JSANCiAgbXV0YXRlKHRleHQgPSBwYXN0ZSgiSWRlbnRpZmljYXRpb246ICIsIElEICwgIlxuQWdlOiAiLCBBR0UgLCANCiAgICAgICAgICAgICAgICAgICAgICAiXG5Qb2ludHM6ICIsIFJBVkxUX0ExLA0KICAgICAgICAgICAgICAgICAgICAgICJcblotU2NvcmU6ICIsIFJBVkxUX0ExX1osIHNlcD0iIikpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBBR0UsIHkgPSBSQVZMVF9BMV9aLCBmaWxsPSBHUk9VUCwgc3Ryb2tlID0gMCwNCiAgICAgICAgICAgICBzaXplID0gQUdFLCBzaGFwZSA9IEVEVV9MRVZFTCAsIHRleHQgPSB0ZXh0KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC43LHBvc2l0aW9uID0gImppdHRlciIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29yZXNSQVZMVCkgKw0KICBzY2FsZV9zaXplKHJhbmdlID0gYygyLCA1KSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJBZ2UiLCBsaW1pdHMgPSBjKDEwLCA1MiksIGJyZWFrcyA9IHNlcSgxMCwgNTAsIGJ5ID0gMTApKSArDQogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIlogU2NvcmUiLCBsaW1pdHMgPSBjKC0zLCAzKSwgYnJlYWtzID0gc2VxKC0zLCAzKSkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAtMzozLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4xKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBhbHBoYSA9IDAuMywgbGluZXR5cGUgPSAiIikgKw0KICBsYWJzKHkgPSAiWSIsIHRpdGxlID0gIlogU2NvcmUgUkFWTFQgQTEiLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhY2UgPSAiaXRhbGljIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICIiLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KQ0KICAgICkNCiAgICANCg0KDQpwcDEwIDwtIGdncGxvdGx5KHAxMCwgdG9vbHRpcD0idGV4dCIpICU+JSAgDQogIA0KICAgIGxheW91dChsZWdlbmQgPSBsaXN0KHggPSAwLCB5ID0gMS4wMSwNCiAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIiAiLA0KICAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICIjZWNmMGYxIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcmNvbG9yID0gIndoaXRlIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcndpZHRoID0gMSwNCiAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSBsaXN0KHNpemUgPSA5LCBmYW1pbHkgPSAiQXJpYWwiLCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPSA1MCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlZ3JvdXBnYXAgPSAyMCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlb3JkZXIgPSAibm9ybWFsIg0KICAgICAgICAgICAgICAgICAgICAgKSkNCg0KcHAxMA0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFAxMQ0KDQoNCnAxMSA8LSBkYXRhICU+JSANCiAgYXJyYW5nZShJRCkgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgUkFWTFRfQTIsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgUkFWTFRfQTJfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IFJBVkxUX0EyX1osIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcscG9zaXRpb24gPSAiaml0dGVyIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc1JBVkxUKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBSQVZMVCBBMiIsIHNoYXBlPSAiIiwgc2l6ZSA9ICIiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIA0KICAgIHRoZW1lKA0KICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwgTmFycm93Iiwgc2l6ZSA9IDExLjUpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIiIsDQogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDUpDQogICAgKQ0KICAgIA0KDQpwcDExIDwtIGdncGxvdGx5KHAxMSwgdG9vbHRpcD0idGV4dCIpICU+JSAgDQogIA0KICAgIGxheW91dChsZWdlbmQgPSBsaXN0KHggPSAwLCB5ID0gMS4wMSwNCiAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIiAiLA0KICAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICIjZWNmMGYxIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcmNvbG9yID0gIndoaXRlIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcndpZHRoID0gMSwNCiAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSBsaXN0KHNpemUgPSA5LCBmYW1pbHkgPSAiQXJpYWwiLCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPSA1MCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlZ3JvdXBnYXAgPSAyMCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlb3JkZXIgPSAibm9ybWFsIg0KICAgICAgICAgICAgICAgICAgICAgKSkNCg0KcHAxMQ0KDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUDEyDQoNCg0KcDEyIDwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBSQVZMVF9BMywNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBSQVZMVF9BM19aLCBzZXA9IiIpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gQUdFLCB5ID0gUkFWTFRfQTNfWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNyxwb3NpdGlvbiA9ICJqaXR0ZXIiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzUkFWTFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIFJBVkxUIEEzIiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCnBwMTIgPC0gZ2dwbG90bHkocDEyLCB0b29sdGlwPSJ0ZXh0IikgJT4lICANCiAgDQogICAgbGF5b3V0KGxlZ2VuZCA9IGxpc3QoeCA9IDAsIHkgPSAxLjAxLA0KICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiICIsDQogICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gIiNlY2YwZjEiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyY29sb3IgPSAid2hpdGUiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGggPSAxLA0KICAgICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3Qoc2l6ZSA9IDksIGZhbWlseSA9ICJBcmlhbCIsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IDUwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2Vncm91cGdhcCA9IDIwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2VvcmRlciA9ICJub3JtYWwiDQogICAgICAgICAgICAgICAgICAgICApKQ0KDQpwcDEyDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFAxMw0KDQoNCnAxMyA8LSBkYXRhICU+JSANCiAgYXJyYW5nZShJRCkgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgUkFWTFRfQTQsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgUkFWTFRfQTRfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IFJBVkxUX0E0X1osIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcscG9zaXRpb24gPSAiaml0dGVyIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc1JBVkxUKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBSQVZMVCBBNCIsIHNoYXBlPSAiIiwgc2l6ZSA9ICIiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIA0KICAgIHRoZW1lKA0KICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwgTmFycm93Iiwgc2l6ZSA9IDExLjUpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIiIsDQogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDUpDQogICAgKQ0KDQoNCnBwMTMgPC0gZ2dwbG90bHkocDEzLCB0b29sdGlwPSJ0ZXh0IikgJT4lICANCiAgDQogICAgbGF5b3V0KGxlZ2VuZCA9IGxpc3QoeCA9IDAsIHkgPSAxLjAxLA0KICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiICIsDQogICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gIiNlY2YwZjEiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyY29sb3IgPSAid2hpdGUiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGggPSAxLA0KICAgICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3Qoc2l6ZSA9IDksIGZhbWlseSA9ICJBcmlhbCIsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IDUwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2Vncm91cGdhcCA9IDIwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2VvcmRlciA9ICJub3JtYWwiDQogICAgICAgICAgICAgICAgICAgICApKQ0KDQpwcDEzDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIFAxNA0KDQoNCnAxNCA8LSBkYXRhICU+JSANCiAgYXJyYW5nZShJRCkgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgUkFWTFRfQTUsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgUkFWTFRfQTVfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IFJBVkxUX0E1X1osIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcscG9zaXRpb24gPSAiaml0dGVyIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc1JBVkxUKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBSQVZMVCBBNCIsIHNoYXBlPSAiIiwgc2l6ZSA9ICIiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIA0KICAgIHRoZW1lKA0KICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwgTmFycm93Iiwgc2l6ZSA9IDExLjUpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIiIsDQogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDUpDQogICAgKQ0KICAgIA0KDQpwcDE0IDwtIGdncGxvdGx5KHAxNCwgdG9vbHRpcD0idGV4dCIpICU+JSAgDQogIA0KICAgIGxheW91dChsZWdlbmQgPSBsaXN0KHggPSAwLCB5ID0gMS4wMSwNCiAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIiAiLA0KICAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICIjZWNmMGYxIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcmNvbG9yID0gIndoaXRlIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcndpZHRoID0gMSwNCiAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSBsaXN0KHNpemUgPSA5LCBmYW1pbHkgPSAiQXJpYWwiLCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPSA1MCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlZ3JvdXBnYXAgPSAyMCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlb3JkZXIgPSAibm9ybWFsIg0KICAgICAgICAgICAgICAgICAgICAgKSkNCg0KcHAxNA0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBQMTUNCg0KDQpwMTUgPC0gZGF0YSAlPiUgDQogIGFycmFuZ2UoSUQpICU+JSANCiAgbXV0YXRlKHRleHQgPSBwYXN0ZSgiSWRlbnRpZmljYXRpb246ICIsIElEICwgIlxuQWdlOiAiLCBBR0UgLCANCiAgICAgICAgICAgICAgICAgICAgICAiXG5Qb2ludHM6ICIsIFJBVkxUX0IxLA0KICAgICAgICAgICAgICAgICAgICAgICJcblotU2NvcmU6ICIsIFJBVkxUX0IxX1osIHNlcD0iIikpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBBR0UsIHkgPSBSQVZMVF9CMV9aLCBmaWxsPSBHUk9VUCwgc3Ryb2tlID0gMCwNCiAgICAgICAgICAgICBzaXplID0gQUdFLCBzaGFwZSA9IEVEVV9MRVZFTCAsIHRleHQgPSB0ZXh0KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC43LHBvc2l0aW9uID0gImppdHRlciIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29yZXNSQVZMVCkgKw0KICBzY2FsZV9zaXplKHJhbmdlID0gYygyLCA1KSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJBZ2UiLCBsaW1pdHMgPSBjKDEwLCA1MiksIGJyZWFrcyA9IHNlcSgxMCwgNTAsIGJ5ID0gMTApKSArDQogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIlogU2NvcmUiLCBsaW1pdHMgPSBjKC0zLCAzKSwgYnJlYWtzID0gc2VxKC0zLCAzKSkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAtMzozLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4xKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBhbHBoYSA9IDAuMywgbGluZXR5cGUgPSAiIikgKw0KICBsYWJzKHkgPSAiWSIsIHRpdGxlID0gIlogU2NvcmUgUkFWTFQgQjEiLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhY2UgPSAiaXRhbGljIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICIiLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KQ0KICAgICkNCiAgICANCg0KcHAxNSA8LSBnZ3Bsb3RseShwMTUsIHRvb2x0aXA9InRleHQiKSAlPiUgIA0KICANCiAgICBsYXlvdXQobGVnZW5kID0gbGlzdCh4ID0gMCwgeSA9IDEuMDEsDQogICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICIgIiwNCiAgICAgICAgICAgICAgICAgICAgIGJnY29sb3IgPSAiI2VjZjBmMSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJjb2xvciA9ICJ3aGl0ZSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJ3aWR0aCA9IDEsDQogICAgICAgICAgICAgICAgICAgICBmb250ID0gbGlzdChzaXplID0gOSwgZmFtaWx5ID0gIkFyaWFsIiwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uID0gNTAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZWdyb3VwZ2FwID0gMjAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZW9yZGVyID0gIm5vcm1hbCINCiAgICAgICAgICAgICAgICAgICAgICkpDQoNCnBwMTUNCg0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIFAxNg0KDQoNCnAxNiA8LSBkYXRhICU+JSANCiAgYXJyYW5nZShJRCkgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgUkFWTFRfQTYsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgUkFWTFRfQTZfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IFJBVkxUX0E2X1osIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcscG9zaXRpb24gPSAiaml0dGVyIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc1JBVkxUKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBSQVZMVCBBNiIsIHNoYXBlPSAiIiwgc2l6ZSA9ICIiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIA0KICAgIHRoZW1lKA0KICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwgTmFycm93Iiwgc2l6ZSA9IDExLjUpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIiIsDQogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDUpDQogICAgKQ0KICAgIA0KDQpwcDE2IDwtIGdncGxvdGx5KHAxNiwgdG9vbHRpcD0idGV4dCIpICU+JSAgDQogIA0KICAgIGxheW91dChsZWdlbmQgPSBsaXN0KHggPSAwLCB5ID0gMS4wMSwNCiAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIiAiLA0KICAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICIjZWNmMGYxIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcmNvbG9yID0gIndoaXRlIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcndpZHRoID0gMSwNCiAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSBsaXN0KHNpemUgPSA5LCBmYW1pbHkgPSAiQXJpYWwiLCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPSA1MCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlZ3JvdXBnYXAgPSAyMCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlb3JkZXIgPSAibm9ybWFsIg0KICAgICAgICAgICAgICAgICAgICAgKSkNCg0KDQpwcDE2DQoNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgUDE3DQoNCnAxNyA8LSBkYXRhICU+JSANCiAgYXJyYW5nZShJRCkgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgUkFWTFRfQTcsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgUkFWTFRfQTdfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IFJBVkxUX0E3X1osIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcscG9zaXRpb24gPSAiaml0dGVyIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc1JBVkxUKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBSQVZMVCBBNyIsIHNoYXBlPSAiIiwgc2l6ZSA9ICIiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIA0KICAgIHRoZW1lKA0KICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwgTmFycm93Iiwgc2l6ZSA9IDExLjUpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIiIsDQogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDUpDQogICAgKQ0KICAgIA0KDQpwcDE3IDwtIGdncGxvdGx5KHAxNywgdG9vbHRpcD0idGV4dCIpICU+JSAgDQogIA0KICAgIGxheW91dChsZWdlbmQgPSBsaXN0KHggPSAwLCB5ID0gMS4wMSwNCiAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIiAiLA0KICAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICIjZWNmMGYxIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcmNvbG9yID0gIndoaXRlIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcndpZHRoID0gMSwNCiAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSBsaXN0KHNpemUgPSA5LCBmYW1pbHkgPSAiQXJpYWwiLCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPSA1MCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlZ3JvdXBnYXAgPSAyMCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlb3JkZXIgPSAibm9ybWFsIg0KICAgICAgICAgICAgICAgICAgICAgKSkNCg0KcHAxNw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUDE4DQoNCnAxOCA8LSBkYXRhICU+JSANCiAgYXJyYW5nZShJRCkgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgUkFWTFRfVE9UQUxTQ09SRSwNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBSQVZMVF9UT1RBTFNDT1JFX1osIHNlcD0iIikpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBBR0UsIHkgPSBSQVZMVF9UT1RBTFNDT1JFX1osIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcscG9zaXRpb24gPSAiaml0dGVyIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc1JBVkxUKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBSQVZMVCBUb3RhbCBTY29yZSIsIHNoYXBlPSAiIiwgc2l6ZSA9ICIiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIA0KICAgIHRoZW1lKA0KICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwgTmFycm93Iiwgc2l6ZSA9IDExLjUpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIiIsDQogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDUpDQogICAgKQ0KICAgIA0KDQpwcDE4IDwtIGdncGxvdGx5KHAxOCwgdG9vbHRpcD0idGV4dCIpICU+JSAgDQogIA0KICAgIGxheW91dChsZWdlbmQgPSBsaXN0KHggPSAwLCB5ID0gMS4wMSwNCiAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIiAiLA0KICAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICIjZWNmMGYxIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcmNvbG9yID0gIndoaXRlIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcndpZHRoID0gMSwNCiAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSBsaXN0KHNpemUgPSA5LCBmYW1pbHkgPSAiQXJpYWwiLCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPSA1MCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlZ3JvdXBnYXAgPSAyMCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlb3JkZXIgPSAibm9ybWFsIg0KICAgICAgICAgICAgICAgICAgICAgKSkNCg0KcHAxOA0KDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBQMTkNCg0KcDE5IDwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBSQVZMVF9UT1RBTFNDT1JFLA0KICAgICAgICAgICAgICAgICAgICAgICJcblotU2NvcmU6ICIsIFJBVkxUX1RPVEFMU0NPUkVfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IFJBVkxUX1RPVEFMU0NPUkVfWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNyxwb3NpdGlvbiA9ICJqaXR0ZXIiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzUkFWTFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIFJBVkxUIFRvdGFsIFNjb3JlIiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCnBwMTkgPC0gZ2dwbG90bHkocDE5LCB0b29sdGlwPSJ0ZXh0IikgJT4lICANCiAgDQogICAgbGF5b3V0KGxlZ2VuZCA9IGxpc3QoeCA9IDAsIHkgPSAxLjAxLA0KICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiICIsDQogICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gIiNlY2YwZjEiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyY29sb3IgPSAid2hpdGUiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGggPSAxLA0KICAgICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3Qoc2l6ZSA9IDksIGZhbWlseSA9ICJBcmlhbCIsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IDUwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2Vncm91cGdhcCA9IDIwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2VvcmRlciA9ICJub3JtYWwiDQogICAgICAgICAgICAgICAgICAgICApKQ0KDQpwcDE5DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUDIwDQoNCnAyMCA8LSBkYXRhICU+JSANCiAgYXJyYW5nZShJRCkgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgUkFWTFRfUkVURU5USU9OLA0KICAgICAgICAgICAgICAgICAgICAgICJcblotU2NvcmU6ICIsIFJBVkxUX1JFVEVOVElPTl9aLCBzZXA9IiIpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gQUdFLCB5ID0gUkFWTFRfUkVURU5USU9OX1osIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcscG9zaXRpb24gPSAiaml0dGVyIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc1JBVkxUKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBSQVZMVCBSZXRlbnRpb24iLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhY2UgPSAiaXRhbGljIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICIiLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KQ0KICAgICkNCiAgICANCg0KDQpwcDIwIDwtIGdncGxvdGx5KHAyMCwgdG9vbHRpcD0idGV4dCIpICU+JSAgDQogIA0KICAgIGxheW91dChsZWdlbmQgPSBsaXN0KHggPSAwLCB5ID0gMS4wMSwNCiAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIiAiLA0KICAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICIjZWNmMGYxIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcmNvbG9yID0gIndoaXRlIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcndpZHRoID0gMSwNCiAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSBsaXN0KHNpemUgPSA5LCBmYW1pbHkgPSAiQXJpYWwiLCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPSA1MCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlZ3JvdXBnYXAgPSAyMCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlb3JkZXIgPSAibm9ybWFsIg0KICAgICAgICAgICAgICAgICAgICAgKSkNCg0KDQpwcDIwDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBQMjENCg0KcDIxIDwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBSQVZMVF9QUk9BVF9JTlRFUkZFUkVOQ0UsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgUkFWTFRfUFJPQVRfSU5URVJGRVJFTkNFX1osIHNlcD0iIikpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBBR0UsIHkgPSBSQVZMVF9QUk9BVF9JTlRFUkZFUkVOQ0VfWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNyxwb3NpdGlvbiA9ICJqaXR0ZXIiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzUkFWTFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIFJBVkxUIFByb2F0aXZlIEludGVyZmVyZW5jZSIsIHNoYXBlPSAiIiwgc2l6ZSA9ICIiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIA0KICAgIHRoZW1lKA0KICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwgTmFycm93Iiwgc2l6ZSA9IDExLjUpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIiIsDQogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDUpDQogICAgKQ0KICAgIA0KDQpwcDIxIDwtIGdncGxvdGx5KHAyMSwgdG9vbHRpcD0idGV4dCIpICU+JSAgDQogIA0KICAgIGxheW91dChsZWdlbmQgPSBsaXN0KHggPSAwLCB5ID0gMS4wMSwNCiAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIiAiLA0KICAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICIjZWNmMGYxIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcmNvbG9yID0gIndoaXRlIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcndpZHRoID0gMSwNCiAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSBsaXN0KHNpemUgPSA5LCBmYW1pbHkgPSAiQXJpYWwiLCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPSA1MCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlZ3JvdXBnYXAgPSAyMCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlb3JkZXIgPSAibm9ybWFsIg0KICAgICAgICAgICAgICAgICAgICAgKSkNCg0KcHAyMQ0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgUDIyDQoNCnAyMiA8LSBkYXRhICU+JSANCiAgYXJyYW5nZShJRCkgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgUkFWTFRfUkVUUk9fSU5URVJGRVJFTkNFLA0KICAgICAgICAgICAgICAgICAgICAgICJcblotU2NvcmU6ICIsIFJBVkxUX1JFVFJPX0lOVEVSRkVSRU5DRV9aLCBzZXA9IiIpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gQUdFLCB5ID0gUkFWTFRfUkVUUk9fSU5URVJGRVJFTkNFX1osIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcscG9zaXRpb24gPSAiaml0dGVyIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc1JBVkxUKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBSQVZMVCBSZXRyb2F0aXZlIEludGVyZmVyZW5jZSIsIHNoYXBlPSAiIiwgc2l6ZSA9ICIiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIA0KICAgIHRoZW1lKA0KICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwgTmFycm93Iiwgc2l6ZSA9IDExLjUpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIiIsDQogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDUpDQogICAgKQ0KICAgIA0KDQpwcDIyIDwtIGdncGxvdGx5KHAyMiwgdG9vbHRpcD0idGV4dCIpICU+JSAgDQogIA0KICAgIGxheW91dChsZWdlbmQgPSBsaXN0KHggPSAwLCB5ID0gMS4wMSwNCiAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIiAiLA0KICAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICIjZWNmMGYxIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcmNvbG9yID0gIndoaXRlIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcndpZHRoID0gMSwNCiAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSBsaXN0KHNpemUgPSA5LCBmYW1pbHkgPSAiQXJpYWwiLCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPSA1MCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlZ3JvdXBnYXAgPSAyMCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlb3JkZXIgPSAibm9ybWFsIg0KICAgICAgICAgICAgICAgICAgICAgKSkNCg0KcHAyMg0KDQoNCmBgYA0KDQoNCg0KYGBge3IgQ3VydmEgZGUgQ3Jlc2NpbWVudG99DQoNCiNpbnN0YWxsLnBhY2thZ2VzKCdyZXNoYXBlMicpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KHJlc2hhcGUyKQ0KDQpnZXR3ZCgpDQoNCg0KZGYgPC0gcmVhZF9leGNlbCgiUkFWTFRzX0VzY29yZVoueGxzeCIpDQoNCmNvbG5hbWVzKGRmKQ0KDQojMWEyODg3LCAjNzk5ZGU0DQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFJlZ3Jlc3PDo28gTGluZWFyICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCmRmLlJBVkxUcyA8LSBkZiAlPiUgc2VsZWN0KEdST1VQLEFHRSxSQVZMVF9BMSxSQVZMVF9BMixSQVZMVF9BMyxSQVZMVF9BNCxSQVZMVF9BNSkNCg0KDQpkZi5tZWx0ZWQgPC0gbWVsdChkZi5SQVZMVHMsIGlkLnZhcnMgPSBjKCJBR0UiLCAiR1JPVVAiKSwgdmFyaWFibGUubmFtZSA9ICJWYXJpw6F2ZWwiLCB2YWx1ZS5uYW1lID0gIlBvbnR1YcOnw6NvIikNCg0KY29yZXMgPC0gYygiQ0FTRSIgPSAiIzFhMjg4NyIsICJDT05UUk9MIiA9ICIjNzk5ZGU0IikNCg0KIyBDcmlhciBvIGdyw6FmaWNvIGRlIGxpbmhhcw0KcCA8LSBnZ3Bsb3QoZGYubWVsdGVkLCBhZXMoeCA9IEFHRSwgeSA9IFBvbnR1YcOnw6NvLCBjb2xvciA9IEdST1VQKSkgKw0KICBnZW9tX3BvaW50KGFscGhhPTAuNSwgcG9zaXRpb24gPSAiaml0dGVyIiwgc2l6ZSA9IDEuNSkgKw0KICBzdGF0X3Ntb290aCggbWV0aG9kID0gImxtIiwgc3BhbiA9IDAuOCwgc2UgPSBGKSsNCiAgbGFicyh0aXRsZSA9ICJHcsOhZmljbyBkZSBMaW5oYXMgUkFWTFQgcG9yIEdydXBvIiwNCiAgICAgICB4ID0gIkFHRSIsDQogICAgICAgeSA9ICJQb250dWHDp8OjbyBSQVZMVCIsDQogICAgICAgY29sb3IgPSAiR3J1cG9zIikgKw0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gY29yZXMpICsNCiAgZmFjZXRfd3JhcCh+IFZhcmnDoXZlbCwgc2NhbGVzID0gImZyZWVfeSIsIG5yb3cgPSAxKSArICAjIFNlcGFyYcOnw6NvIHBvciBHUk9VUCAoY2FzbyBlIGNvbnRyb2xlKQ0KICB0aGVtZV9taW5pbWFsKCkNCg0KcA0KDQpzaGFwaXJvLnRlc3QoZGYuUkFWTFRzJFJBVkxUX0E1KQ0KDQpgYGANCmBgYHtyIExpbmUgUGxvdH0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBNw6lkaWFzIGRlIERlc2VtcGVuaG8gcG9yIElkYWRlICMjIyMjIyMjIyMjIyMjIyMjDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KHRpZHlyKQ0KDQpnZXR3ZCgpDQoNCmRhdGEucmF2bHQgPC0gcmVhZF9leGNlbCgiUkFWTFRzX0VzY29yZVoueGxzeCIpDQoNCmRhdGEucmF2bHQgPC0gZGF0YS5yYXZsdCAlPiUgIHNlbGVjdCgiQUdFIiwiR1JPVVAiLCJSQVZMVF9BMSIsIlJBVkxUX0EyIiwgIlJBVkxUX0EzIiwiUkFWTFRfQTQiLCAiUkFWTFRfQTUiKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KDQpkYXRhLnJhdmx0IDwtIGRhdGEucmF2bHQgJT4lDQogIG11dGF0ZSgNCiAgICBmYWl4YV9ldGFyaWEgPSBjYXNlX3doZW4oDQogICAgICBBR0UgPj0gMTggJiBBR0UgPD0gMjAgfiAiMTgtMjAiLA0KICAgICAgQUdFID49IDIxICYgQUdFIDw9IDMwIH4gIjIxLTMwIiwNCiAgICAgIEFHRSA+PSAyMSAmIEFHRSA8PSAzMCB+ICIyMS0zMCIsDQogICAgICBBR0UgPj0gMzEgJiBBR0UgPD0gNDAgfiAiMzEtNDAiLA0KICAgICAgQUdFID49IDQxICYgQUdFIDw9IDUwIH4gIjQxLTUwIiwNCiAgICAgIFRSVUUgfiBOQV9jaGFyYWN0ZXJfDQogICAgKQ0KICApDQoNCm1lZGlhc19yYXZsdCA8LSBkYXRhLnJhdmx0ICU+JQ0KICBncm91cF9ieShHUk9VUCwgZmFpeGFfZXRhcmlhKSAlPiUNCiAgc3VtbWFyaXNlKA0KICAgIG1lZGlhX1JBVkxUX0ExID0gbWVhbihSQVZMVF9BMSwgbmEucm0gPSBUUlVFKSwNCiAgICBtZWRpYV9SQVZMVF9BMiA9IG1lYW4oUkFWTFRfQTIsIG5hLnJtID0gVFJVRSksDQogICAgbWVkaWFfUkFWTFRfQTMgPSBtZWFuKFJBVkxUX0EzLCBuYS5ybSA9IFRSVUUpLA0KICAgIG1lZGlhX1JBVkxUX0E0ID0gbWVhbihSQVZMVF9BNCwgbmEucm0gPSBUUlVFKSwNCiAgICBtZWRpYV9SQVZMVF9BNSA9IG1lYW4oUkFWTFRfQTUsIG5hLnJtID0gVFJVRSkNCiAgKSAlPiUNCiAgdW5ncm91cCgpDQoNCg0KbWVkaWFzX3Jhdmx0DQoNCm1lZGlhc19yYXZsdCA8LSBkYXRhLnJhdmx0ICU+JQ0KICBncm91cF9ieShHUk9VUCwgZmFpeGFfZXRhcmlhKSAlPiUNCiAgc3VtbWFyaXNlKA0KICAgIG1lZGlhX1JBVkxUX0ExID0gbWVhbihSQVZMVF9BMSwgbmEucm0gPSBUUlVFKSwNCiAgICBtZWRpYV9SQVZMVF9BMiA9IG1lYW4oUkFWTFRfQTIsIG5hLnJtID0gVFJVRSksDQogICAgbWVkaWFfUkFWTFRfQTMgPSBtZWFuKFJBVkxUX0EzLCBuYS5ybSA9IFRSVUUpLA0KICAgIG1lZGlhX1JBVkxUX0E0ID0gbWVhbihSQVZMVF9BNCwgbmEucm0gPSBUUlVFKSwNCiAgICBtZWRpYV9SQVZMVF9BNSA9IG1lYW4oUkFWTFRfQTUsIG5hLnJtID0gVFJVRSksDQogICAgc2RfUkFWTFRfQTEgPSBzZChSQVZMVF9BMSwgbmEucm0gPSBUUlVFKSwNCiAgICBzZF9SQVZMVF9BMiA9IHNkKFJBVkxUX0EyLCBuYS5ybSA9IFRSVUUpLA0KICAgIHNkX1JBVkxUX0EzID0gc2QoUkFWTFRfQTMsIG5hLnJtID0gVFJVRSksDQogICAgc2RfUkFWTFRfQTQgPSBzZChSQVZMVF9BNCwgbmEucm0gPSBUUlVFKSwNCiAgICBzZF9SQVZMVF9BNSA9IHNkKFJBVkxUX0E1LCBuYS5ybSA9IFRSVUUpDQogICkgJT4lDQogIHVuZ3JvdXAoKSAlPiUNCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBzdGFydHNfd2l0aCgibWVkaWFfIiksIG5hbWVzX3RvID0gIlJBVkxUIiwgdmFsdWVzX3RvID0gIm1lZGlhIikgJT4lDQogIHBpdm90X2xvbmdlcihjb2xzID0gc3RhcnRzX3dpdGgoInNkXyIpLCBuYW1lc190byA9ICJzZF9uYW1lIiwgdmFsdWVzX3RvID0gInNkIikgJT4lDQogIG11dGF0ZShSQVZMVCA9IGdzdWIoIm1lZGlhXyIsICIiLCBSQVZMVCksDQogICAgICAgICBzZF9uYW1lID0gZ3N1Yigic2RfIiwgIiIsIHNkX25hbWUpKSAlPiUNCiAgZmlsdGVyKFJBVkxUID09IHNkX25hbWUpICU+JQ0KICBzZWxlY3QoLXNkX25hbWUpDQoNCg0KDQpwIDwtIGdncGxvdChtZWRpYXNfcmF2bHQsIGFlcyh4ID0gZmFpeGFfZXRhcmlhLCB5ID0gbWVkaWEsIGdyb3VwID0gaW50ZXJhY3Rpb24oR1JPVVAsIFJBVkxUKSwgY29sb3IgPSBSQVZMVCkpICsNCiAgZ2VvbV9saW5lKGFlcyhsaW5ldHlwZSA9IEdST1VQKSwgc2l6ZSA9IDEpICsgICMgRGlmZXJlbmNpYSBvcyBncnVwb3MgcG9yIHRpcG8gZGUgbGluaGENCiAgZ2VvbV9wb2ludChzaXplID0gMikgKw0KICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gbWVkaWEgLSBzZCwgeW1heCA9IG1lZGlhICsgc2QsIGZpbGwgPSBSQVZMVCksIGFscGhhID0gMC4yKSArDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMDEyMDRFIiwgIiMwMjgzOTEiLCAiI0ZGMDAwMCIsICIjRkZBMjdGIiwgIiNFNTlCRTkiKSkgKyAgIyBQYWxldGEgZGUgY29yZXMgZ3JhZGllbnRlIHBhcmEgUkFWTFQNCiAgc2NhbGVfbGluZXR5cGVfbWFudWFsKHZhbHVlcyA9IGMoInNvbGlkIiwgImRhc2hlZCIpKSArICAjIFRpcG9zIGRlIGxpbmhhIHBhcmEgb3MgZ3J1cG9zDQogIGxhYnModGl0bGUgPSAiTcOpZGlhcyBkb3MgVmFsb3JlcyBSQVZMVCBwb3IgR3J1cG8gZSBGYWl4YSBFdMOhcmlhIiwNCiAgICAgICB4ID0gIkZhaXhhIEV0w6FyaWEiLA0KICAgICAgIHkgPSAiTcOpZGlhIGRvcyBWYWxvcmVzIFJBVkxUIiwNCiAgICAgICBjb2xvciA9ICJSQVZMVCIsDQogICAgICAgbGluZXR5cGUgPSAiR3J1cG8iKSArDQogIHRoZW1lX21pbmltYWwoKQ0KDQpwDQoNCg0KIyBDcmlhciBvIGdyw6FmaWNvIGRlIGxpbmhhIGNvbSBzb21icmEgcGFyYSBkZXN2aW8gcGFkcsOjbyBlIGZhY2V0X3dyYXANCnAgPC0gZ2dwbG90KG1lZGlhc19yYXZsdCwgYWVzKHggPSBmYWl4YV9ldGFyaWEsIHkgPSBtZWRpYSwgZ3JvdXAgPSBHUk9VUCwgY29sb3IgPSBHUk9VUCkpICsNCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IG1lZGlhIC0gc2QsIHltYXggPSBtZWRpYSArIHNkLCBmaWxsID0gR1JPVVApLCBhbHBoYSA9IDAuNikgKw0KICBnZW9tX2xpbmUoYWVzKGxpbmV0eXBlID0gR1JPVVApLCBzaXplID0gMSkgKyAgIyBEaWZlcmVuY2lhIG9zIGdydXBvcyBwb3IgdGlwbyBkZSBsaW5oYQ0KICBnZW9tX3BvaW50KHNpemUgPSAyKSArDQogIGZhY2V0X3dyYXAofiBSQVZMVCwgc2NhbGVzID0gImZyZWVfeSIpICsgICMgRmFjZXRhIHBvciB2YXJpw6F2ZWwgUkFWTFQNCiAgc2NhbGVfbGluZXR5cGVfbWFudWFsKHZhbHVlcyA9IGMoInNvbGlkIiwgImRhc2hlZCIpKSArICAjIFRpcG9zIGRlIGxpbmhhIHBhcmEgb3MgZ3J1cG9zDQogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDE1KSkgKyAgIyBBanVzdGFyIGEgZXNjYWxhIGRvIGVpeG8geQ0KICBsYWJzKHRpdGxlID0gIk3DqWRpYXMgZG9zIFZhbG9yZXMgUkFWTFQgcG9yIEdydXBvIGUgRmFpeGEgRXTDoXJpYSIsDQogICAgICAgeCA9ICJGYWl4YSBFdMOhcmlhIiwNCiAgICAgICB5ID0gIk3DqWRpYSBkb3MgVmFsb3JlcyBSQVZMVCIsDQogICAgICAgY29sb3IgPSAiR3J1cG8iLA0KICAgICAgIGZpbGwgPSAiR3J1cG8iLA0KICAgICAgIGxpbmV0eXBlID0gIkdydXBvIikgKw0KICB0aGVtZV9taW5pbWFsKCkNCg0KDQpwDQoNCg0KZ2dzYXZlKGZpbGVuYW1lID0gIlJBVkxUcy1BMS1BNS5wZGYiLCBwbG90ID0gcCkNCg0KYGBgDQoNCmBgYHtyfQ0KIyBjb21wYXJhbmRvIGRlIDUgZW0gNSANCg0KZGF0YS5yYXZsdCA8LSByZWFkX2V4Y2VsKCJSQVZMVHNfRXNjb3JlWi54bHN4IikNCg0KZGF0YS5yYXZsdCA8LSBkYXRhLnJhdmx0ICU+JSAgc2VsZWN0KCJBR0UiLCJHUk9VUCIsIlJBVkxUX0ExIiwiUkFWTFRfQTIiLCAiUkFWTFRfQTMiLCJSQVZMVF9BNCIsICJSQVZMVF9BNSIpDQogDQoNCmRhdGEucmF2bHQgPC0gZGF0YS5yYXZsdCAlPiUNCiAgbXV0YXRlKA0KICAgIGZhaXhhX2V0YXJpYSA9IGNhc2Vfd2hlbigNCiAgICAgIEFHRSA+PSAxOCAmIEFHRSA8PSAyMCB+ICIxOC0yMCIsDQogICAgICBBR0UgPj0gMjEgJiBBR0UgPD0gMjUgfiAiMjEtMjUiLA0KICAgICAgQUdFID49IDI2ICYgQUdFIDw9IDMwIH4gIjI2LTMwIiwNCiAgICAgIEFHRSA+PSAzMSAmIEFHRSA8PSAzNSB+ICIzMS0zNSIsDQogICAgICBBR0UgPj0gMzYgJiBBR0UgPD0gNDAgfiAiMzYtNDAiLA0KICAgICAgQUdFID49IDQxICYgQUdFIDw9IDQ1IH4gIjQxLTQ1IiwNCiAgICAgIEFHRSA+PSA0NiAmIEFHRSA8PSA1MCB+ICI0Ni01MCINCiAgICApDQogICkNCg0KI21lZGlhc19yYXZsdCA8LSBkYXRhLnJhdmx0ICU+JQ0KIyAgZ3JvdXBfYnkoR1JPVVAsIGZhaXhhX2V0YXJpYSkgJT4lDQojICBzdW1tYXJpc2UoDQojICAgIG1lZGlhX1JBVkxUX0ExID0gbWVhbihSQVZMVF9BMSwgbmEucm0gPSBUUlVFKSwNCiMgICAgbWVkaWFfUkFWTFRfQTIgPSBtZWFuKFJBVkxUX0EyLCBuYS5ybSA9IFRSVUUpLA0KIyAgICBtZWRpYV9SQVZMVF9BMyA9IG1lYW4oUkFWTFRfQTMsIG5hLnJtID0gVFJVRSksDQojICAgIG1lZGlhX1JBVkxUX0E0ID0gbWVhbihSQVZMVF9BNCwgbmEucm0gPSBUUlVFKSwNCiMgICAgbWVkaWFfUkFWTFRfQTUgPSBtZWFuKFJBVkxUX0E1LCBuYS5ybSA9IFRSVUUpDQojICApICU+JQ0KIyAgdW5ncm91cCgpDQoNCiNtZWRpYXNfcmF2bHQNCg0KbWVkaWFzX3Jhdmx0IDwtIGRhdGEucmF2bHQgJT4lDQogIGdyb3VwX2J5KEdST1VQLCBmYWl4YV9ldGFyaWEpICU+JQ0KICBzdW1tYXJpc2UoDQogICAgbWVkaWFfUkFWTFRfQTEgPSBtZWFuKFJBVkxUX0ExLCBuYS5ybSA9IFRSVUUpLA0KICAgIG1lZGlhX1JBVkxUX0EyID0gbWVhbihSQVZMVF9BMiwgbmEucm0gPSBUUlVFKSwNCiAgICBtZWRpYV9SQVZMVF9BMyA9IG1lYW4oUkFWTFRfQTMsIG5hLnJtID0gVFJVRSksDQogICAgbWVkaWFfUkFWTFRfQTQgPSBtZWFuKFJBVkxUX0E0LCBuYS5ybSA9IFRSVUUpLA0KICAgIG1lZGlhX1JBVkxUX0E1ID0gbWVhbihSQVZMVF9BNSwgbmEucm0gPSBUUlVFKSwNCiAgICBzZF9SQVZMVF9BMSA9IHNkKFJBVkxUX0ExLCBuYS5ybSA9IFRSVUUpLA0KICAgIHNkX1JBVkxUX0EyID0gc2QoUkFWTFRfQTIsIG5hLnJtID0gVFJVRSksDQogICAgc2RfUkFWTFRfQTMgPSBzZChSQVZMVF9BMywgbmEucm0gPSBUUlVFKSwNCiAgICBzZF9SQVZMVF9BNCA9IHNkKFJBVkxUX0E0LCBuYS5ybSA9IFRSVUUpLA0KICAgIHNkX1JBVkxUX0E1ID0gc2QoUkFWTFRfQTUsIG5hLnJtID0gVFJVRSkNCiAgKSAlPiUNCiAgdW5ncm91cCgpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IHN0YXJ0c193aXRoKCJtZWRpYV8iKSwgbmFtZXNfdG8gPSAiUkFWTFQiLCB2YWx1ZXNfdG8gPSAibWVkaWEiKSAlPiUNCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBzdGFydHNfd2l0aCgic2RfIiksIG5hbWVzX3RvID0gInNkX25hbWUiLCB2YWx1ZXNfdG8gPSAic2QiKSAlPiUNCiAgbXV0YXRlKFJBVkxUID0gZ3N1YigibWVkaWFfIiwgIiIsIFJBVkxUKSwNCiAgICAgICAgIHNkX25hbWUgPSBnc3ViKCJzZF8iLCAiIiwgc2RfbmFtZSkpICU+JQ0KICBmaWx0ZXIoUkFWTFQgPT0gc2RfbmFtZSkgJT4lDQogIHNlbGVjdCgtc2RfbmFtZSkNCg0KDQoNCiMgQ3JpYXIgbyBncsOhZmljbyBkZSBsaW5oYSBjb20gc29tYnJhIHBhcmEgZGVzdmlvIHBhZHLDo28gZSBmYWNldF93cmFwDQpwIDwtIGdncGxvdChtZWRpYXNfcmF2bHQsIGFlcyh4ID0gZmFpeGFfZXRhcmlhLCB5ID0gbWVkaWEsIGdyb3VwID0gR1JPVVAsIGNvbG9yID0gR1JPVVApKSArDQogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBtZWRpYSAtIHNkLCB5bWF4ID0gbWVkaWEgKyBzZCwgZmlsbCA9IEdST1VQKSwgYWxwaGEgPSAwLjYpICsNCiAgZ2VvbV9saW5lKGFlcyhsaW5ldHlwZSA9IEdST1VQKSwgc2l6ZSA9IDEpICsgICMgRGlmZXJlbmNpYSBvcyBncnVwb3MgcG9yIHRpcG8gZGUgbGluaGENCiAgZ2VvbV9wb2ludChzaXplID0gMikgKw0KICBmYWNldF93cmFwKH4gUkFWTFQsIHNjYWxlcyA9ICJmcmVlX3kiKSArICAjIEZhY2V0YSBwb3IgdmFyacOhdmVsIFJBVkxUDQogIHNjYWxlX2xpbmV0eXBlX21hbnVhbCh2YWx1ZXMgPSBjKCJzb2xpZCIsICJkYXNoZWQiKSkgKyAgIyBUaXBvcyBkZSBsaW5oYSBwYXJhIG9zIGdydXBvcw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxNSkpICsgICMgQWp1c3RhciBhIGVzY2FsYSBkbyBlaXhvIHkNCiAgbGFicyh0aXRsZSA9ICJNw6lkaWFzIGRvcyBWYWxvcmVzIFJBVkxUIHBvciBHcnVwbyBlIEZhaXhhIEV0w6FyaWEiLA0KICAgICAgIHggPSAiRmFpeGEgRXTDoXJpYSIsDQogICAgICAgeSA9ICJNw6lkaWEgZG9zIFZhbG9yZXMgUkFWTFQiLA0KICAgICAgIGNvbG9yID0gIkdydXBvIiwNCiAgICAgICBmaWxsID0gIkdydXBvIiwNCiAgICAgICBsaW5ldHlwZSA9ICJHcnVwbyIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQoNCnANCg0KZ2dzYXZlKGZpbGVuYW1lID0gIlJBVkxUcy1yZWdyZXNzc2FvLXN1YmRpdmlkaWRhLnBkZiIsIHBsb3QgPSBwICwgd2lkdGggPSAxNCwgaGVpZ2h0ID0gMTApDQoNCg0KDQpgYGANCg0KDQo=